使用Jenkins 2.x中的Pipeline插件,如何在sh步骤中访问在阶段或节点级某处定义的Groovy变量?
简单的例子:
node {
stage('Test Stage') {
some_var = 'Hello World' // this is Groovy
echo some_var // printing via Groovy works
sh 'echo $some_var' // printing in shell does not work
}
}
Run Code Online (Sandbox Code Playgroud)
在Jenkins输出页面上给出以下内容:
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test Stage)
[Pipeline] echo
Hello World
[Pipeline] sh
[test] Running shell script
+ echo
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Run Code Online (Sandbox Code Playgroud)
可以看出,echo …
我尝试将一些嵌套文档索引到Elasticsearch(v2.3.1)映射中,该映射如下所示(基于文档中的此示例):
PUT /my_index
{
"mappings": {
"blogpost": {
"properties": {
"title": { "type": "string" },
"comments": {
"type": "nested",
"properties": {
"name": { "type": "string" },
"comment": { "type": "string" }
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不明白我的JSON文档必须是什么才能适应该映射.我试过了
PUT /my_index/some_type/1
{
"title": "some_title",
"comments": {
"name": "some_name",
"comment": "some_comment"
}
}
Run Code Online (Sandbox Code Playgroud)
以及
PUT /my_index_some_type/1
{
"title": "some_title",
"comments": [
{
"name": "some_name",
"comment": "some_comment"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这两者都导致了
{
"error":
{
"root_cause":
[
{
"type": "remote_transport_exception",
"reason": "[Caiman][172.18.0.4:9300][indices:data/write/index[p]]" …Run Code Online (Sandbox Code Playgroud) 根据官方Docker文档,可以将容器的输出stdout和stderr输出作为GELF消息获取,这是格式,例如Graylog/Graylog2和logstash.
当我从命令行手动运行容器时,这很好用.例如,
docker run --log-driver=gelf --log-opt gelf-address=udp://localhost:12201 busybox echo This is my message.
Run Code Online (Sandbox Code Playgroud)
将向我的在localhost上运行的Graylog2服务器发送一条日志消息,该服务器在端口12201配置了UDP输入监听器.
现在,我想使用与docker-compose相同的日志选项,根据文档,原则上应该是可能的.但是,文档不提任何日志格式,但是json-file,syslog和none当我包括像
my-container:
container_name: ...
build: ...
ports: ...
log_driver: "gelf"
log_opt:
gelf-address: "udp://localhost:12201"
Run Code Online (Sandbox Code Playgroud)
在我的docker-compose.yml文件然后docker-compose up失败:
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 39, in main
File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 21, in sys_dispatch
File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.command", …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的pandas数据帧,其中包含一些随机值和一个DatetimeIndex,如下所示:
import pandas as pd
from numpy.random import randint
import datetime as dt
import matplotlib.pyplot as plt
# create a random dataframe with datetimeindex
dateRange = pd.date_range('1/1/2011', '3/30/2011', freq='D')
randomInts = randint(1, 50, len(dateRange))
df = pd.DataFrame({'RandomValues' : randomInts}, index=dateRange)
Run Code Online (Sandbox Code Playgroud)
然后我用两种不同的方式绘制它:
# plot with pandas own matplotlib wrapper
df.plot()
# plot directly with matplotlib pyplot
plt.plot(df.index, df.RandomValues)
plt.show()
Run Code Online (Sandbox Code Playgroud)
(不要在同一个数字上同时使用这两个语句.)
我使用Python 3.4 64bit和matplotlib 1.4.使用pandas 0.14,两个语句都给我预期的图(他们使用略微不同的x轴格式,这是可以的;请注意,数据是随机的,因此图看起来不一样):


但是,当使用pandas 0.15时,pandas图看起来不错,但matplotlib图在x轴上有一些奇怪的刻度格式:


这种行为有什么好的理由以及为什么它从熊猫0.14变为0.15?
在使用Python 点击库编写命令行界面(CLI)时,是否可以定义三个选项,只有在第一个(可选)未设置的情况下才需要第二个和第三个选项?
我的用例是一个登录系统,它允许我通过authentication token(选项1),或者通过username(选项2)和password(选项3)进行身份验证.
如果给出了令牌,则无需检查username并password定义或提示它们.否则,如果忽略了此令牌,然后username和password成为必需的,必须给予.
这可以使用回调以某种方式完成吗?
我的入门代码当然不能反映出预期的模式:
@click.command()
@click.option('--authentication-token', prompt=True, required=True)
@click.option('--username', prompt=True, required=True)
@click.option('--password', hide_input=True, prompt=True, required=True)
def login(authentication_token, username, password):
print(authentication_token, username, password)
if __name__ == '__main__':
login()
Run Code Online (Sandbox Code Playgroud) 根据这个和这个 GitHub问题,目前在使用docker-compose构建一个或多个图像时,如何为服务的图像提供多个标签没有本地方式.
我的用例是构建docker-compose.yml文件中定义的图像,并使用一些自定义标记(例如某些构建编号或日期或类似标记)标记一次,并将其标记为latest.
虽然docker使用docker tag可以轻松实现这一点,但docker-compose只允许在图像键中设置一个标记.使用docker tag连同docker-compose是不是一种选择对我,因为我要保持我的所有码头工人有关的定义docker-compose.yml文件,而不是将其复制过来到我的构建脚本.
在首先使用docker-compose和不必硬编码/复制图像名称的情况下,设置多个标签会有什么好处?
我尝试设置一个最小的Flask应用程序,该应用程序使用eventlet立即响应并发请求,而不是阻塞并响应一个请求(如标准的Flask调试Web服务器那样).
先决条件:
pip install Flask
pip install eventlet
Run Code Online (Sandbox Code Playgroud)
从我到目前为止在互联网上发现的东西的理解,它应该像这样工作:
# activate eventlet
import eventlet
eventlet.monkey_patch()
from flask import Flask
import datetime
from time import sleep
# create a new Flask application
app = Flask(__name__)
# a short running task that returns immediately
@app.route('/shortTask')
def short_running_task():
start = datetime.datetime.now()
return 'Started at {0}, returned at {1}'.format(start, datetime.datetime.now())
# a long running tasks that returns after 30s
@app.route('/longTask')
def long_running_task():
start = datetime.datetime.now()
sleep(30)
return 'Started at {0}, returned at …Run Code Online (Sandbox Code Playgroud) 使用Seaborn,我可以pandas DataFrame在同一个图上创建多个一列的箱形图.我想将自定义样式应用于传单(异常值),例如设置标记符号,颜色和标记大小.
但是,seaborn.boxplot上的API文档仅提供了一个参数fliersize,可以让我控制传单的大小,但不能控制颜色和符号.
由于Seaborn使用matplotlib进行绘图,我想我可以boxplot像这样为函数提供matplotlib样式字典:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# create a dataframe
df = pd.DataFrame({'column_a': [3, 6, 200, 100, 7], 'column_b': [1, 8, 4, 150, 290], 'column_c': [6, 7, 20, 80, 275]})
# set figure size
sns.set(rc={"figure.figsize": (14, 6)})
# define outlier properties
flierprops = dict(marker='o', markersize=5)
# create boxplot
ax = sns.boxplot(df, vert=False, showmeans=True, flierprops=flierprops)
plt.show()
Run Code Online (Sandbox Code Playgroud)
结果:
根据提供的字典,我希望有一个代表传单的大红色圆圈,column_c但是仍然使用标准设置.
StackOverflow和其他社区(AskUbuntu,Unix和Linux等)上有很多帖子,提供有关如何使用wget或cUrl自动从Oracle网站下载Java发行版的建议.它们都涉及发送一个cookie,假设在真正的下载链接出现之前,人们通常必须手动接受许可协议.
但是,在尝试下载最近已移至Oracle Archive页面的 Java 7 SDK时,这些对我来说都不起作用.
如果我转到此页面,请手动接受许可协议,然后复制下载链接,如下所示:
http://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz
请注意,它otn在中间,而所有其他帖子都是关于存储在其下的URL otn-pub.
使用适用于otn-pub链接的常用方法如下所示:
wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=a" http://download.oracle.com/otn-pub/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz
但是,这不适用于otnURL类型.相反,wget返回:
--2017-05-23 12:11:12-- http://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz
Resolving download.oracle.com (download.oracle.com)... 92.122.214.233, 92.122.214.217
Connecting to download.oracle.com (download.oracle.com)|92.122.214.233|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://edelivery.oracle.com/akam/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz [following]
--2017-05-23 12:11:12-- https://edelivery.oracle.com/akam/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz
Resolving edelivery.oracle.com (edelivery.oracle.com)... 23.0.39.115, 2a02:26f0:8f:29a::2d3e
Connecting to edelivery.oracle.com (edelivery.oracle.com)|23.0.39.115|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://login.oracle.com/pls/orasso/orasso.wwsso_app_admin.ls_login?Site2pstoreToken=v1.2~CA55CD32~5B4FBD9FD4FC906722CB92CC3F7FA417B904138FD53F875C3FEFDF932EC5928D866C8B39EACAA55F28099E034BAC612F869C90A39B20E322E380F4A006B9668EAD35323A1C548EAD5D03EE8D6C772A88C049F024986DC6CCF546B00D347731F76BE786B96F0041610DEE7B6B4EAC27DCBE558B151B032973F065FC0367918B72DBCAB4B7FC920BAC4C13E820DFFE1761C5C473B6E0A4F0E94FABACDB40F02AD6B2BAB1D3F57371B14048557A0291AC3F12C73A30CAF4AAEB8A545475300A1ABBD60E2BF27FB1B11BC47DE91D0E918E04E4C4663632E98752BBC07671BBD21E7C6F73D78A8A66254579EC63B99716D999 …Run Code Online (Sandbox Code Playgroud) 给定一个非常简单的docker-compose文件:
version: '3'
services:
test:
image: busybox
env_file:
- my.env
command: env
Run Code Online (Sandbox Code Playgroud)
以及my.env其中引用的文件:
FOO=BAR
Run Code Online (Sandbox Code Playgroud)
按预期运行docker-compose up打印(容器名称前缀默认为父目录的名称):
test_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
test_1 | HOSTNAME=00dc4fa7f38a
test_1 | FOO=BAR
test_1 | HOME=/root
tmp_test_1 exited with code 0
Run Code Online (Sandbox Code Playgroud)
env_file从外部覆盖变量(如 中FOO=SOMETHING_ELSE docker-compose up),但不会反映在容器中。输出仍将FOO=BAR包含my.env.
是否可以以某种方式覆盖env_file从外部定义的变量,而不更改文件内部的变量?docker-compose.yml我知道如果我用以下行扩展我的文件就会起作用
environment:
- FOO
Run Code Online (Sandbox Code Playgroud)
然而,这并不能真正扩展到更大数量的变量——人们总是必须确保env_file和docker-compose.yml保持同步以防止出现严重的错误。