小编Dir*_*irk的帖子

从Jenkins管道中的shell步骤中访问Groovy变量

使用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 …

jenkins jenkins-pipeline

28
推荐指数
3
解决办法
5万
查看次数

Elasticsearch中的嵌套类型:"索引文档时,无法将对象映射从嵌套更改为非嵌套"

我尝试将一些嵌套文档索引到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)

mapping nested elasticsearch

23
推荐指数
1
解决办法
1万
查看次数

使用docker-compose和GELF日志驱动程序

根据官方Docker文档,可以将容器的输出stdoutstderr输出作为GELF消息获取,这是格式,例如Graylog/Graylog2logstash.

当我从命令行手动运行容器时,这很好用.例如,

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,syslognone当我包括像

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)

logging docker docker-compose

16
推荐指数
2
解决办法
1万
查看次数

使用matplotlib在x轴上绘制datetimeindex会在pandas 0.15中创建错误的刻度,而0.14则相反

我创建了一个简单的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 64bitmatplotlib 1.4.使用pandas 0.14,两个语句都给我预期的图(他们使用略微不同的x轴格式,这是可以的;请注意,数据是随机的,因此图看起来不一样): 熊猫0.14:熊猫情节

pandas 0.14:matplotlib图

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

熊猫0.15:熊猫情节

pandas 0.15:matplotlib图

这种行为有什么好的理由以及为什么它从熊猫0.14变为0.15?

python matplotlib pandas

12
推荐指数
1
解决办法
3万
查看次数

单击命令行界面:如果未设置其他可选选项,则需要选项

在使用Python 点击库编写命令行界面(CLI)时,是否可以定义三个选项,只有在第一个(可选)未设置的情况下才需要第二个和第三个选项?

我的用例是一个登录系统,它允许我通过authentication token(选项1),或者通过username(选项2)和password(选项3)进行身份验证.

如果给出了令牌,则无需检查usernamepassword定义或提示它们.否则,如果忽略了此令牌,然后usernamepassword成为必需的,必须给予.

这可以使用回调以某种方式完成吗?

我的入门代码当然不能反映出预期的模式:

@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)

python command-line-interface python-click

12
推荐指数
2
解决办法
5756
查看次数

如何使用docker-compose多个图像标签

根据这个这个 GitHub问题,目前在使用docker-compose构建一个或多个图像时,如何为服务的图像提供多个标签没有本地方式.

我的用例是构建docker-compose.yml文件中定义的图像,并使用一些自定义标记(例如某些构建编号或日期或类似标记)标记一次,并将其标记为latest.

虽然docker使用docker tag可以轻松实现这一点,但docker-compose只允许在图像键中设置一个标记.使用docker tag连同docker-compose是不是一种选择对我,因为我要保持我的所有码头工人有关的定义docker-compose.yml文件,而不是将其复制过来到我的构建脚本.

在首先使用docker-compose和不必硬编码/复制图像名称的情况下,设置多个标签会有什么好处?

tags docker docker-compose

11
推荐指数
5
解决办法
6905
查看次数

使用Flask和eventlet响应并发请求

我尝试设置一个最小的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)

python flask eventlet flask-socketio

10
推荐指数
1
解决办法
7333
查看次数

在Seaborn boxplot中设置flier(离群值)样式将被忽略

使用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但是仍然使用标准设置.

当直接使用matplotlib时, …

python matplotlib seaborn

9
推荐指数
2
解决办法
5191
查看次数

从Oracle Archive页面下载Oracle Java 7 SDK的wget/curl

StackOverflow和其他社区(AskUbuntu,Unix和Linux等)上有很多帖子,提供有关如何使用wgetcUrl自动从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)

java curl wget

9
推荐指数
2
解决办法
1万
查看次数

使用外部的实际环境覆盖 docker-compose env_file 中的变量

给定一个非常简单的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_filedocker-compose.yml保持同步以防止出现严重的错误。

environment-variables docker docker-compose env-file

9
推荐指数
1
解决办法
9176
查看次数