我使用众所周知的第三方包装系统打包一些python包,我遇到了创建入口点的问题.
当我在我的机器上安装一个入口点时,入口点将包含指向任何python解释器的shebang,如下所示:
在/home/me/development/test/setup.py中
from setuptools import setup
setup(
entry_points={
"console_scripts": [
'some-entry-point = test:main',
]
}
)
Run Code Online (Sandbox Code Playgroud)
在/home/me/.virtualenvs/test/bin/some-entry-point中:
#!/home/me/.virtualenvs/test/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'test==1.0.0','console_scripts','some-entry-point'
__requires__ = 'test==1.0.0'
import sys
from pkg_resources import load_entry_point
sys.exit(
load_entry_point('test==1.0.0', 'console_scripts', 'some-entry-point')()
)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,入口点样板文件包含一个硬编码的python解释器路径,该路径位于我用于创建第三方软件包的虚拟环境中.
使用我的第三方打包系统安装此入口点会导致在计算机上安装入口点.但是,通过对目标机器上不存在的python解释器的这种硬编码引用,用户必须运行python /path/to/some-entry-point.
shebang使这个非常不可移植.(这肯定不是virtualenv的设计目标;但我只需要在这里使它更便携.)
我宁愿不诉诸疯狂的find/xargs/sed命令.(虽然这是我的后备.)
有没有什么方法可以在shebang使用setuptools旗帜或配置后改变解释器路径?
我最近在这里的一个帖子的盐柱中看到了以下结构
/srv/pillar/ssh.sls:
ssh_certs:
{% if grains['fqdn'] == 'server1.example.com' %}
dsa: |
-----BEGIN DSA PRIVATE KEY-----
{# key text goes here with consistant indentation... #}
-----END DSA PRIVATE KEY-----
ecdsa: |
-----BEGIN ECDSA PRIVATE KEY-----
{# key text goes here with consistant indentation... #}
-----END ECDSA PRIVATE KEY-----
rsa: |
-----BEGIN RSA PRIVATE KEY-----
{# key text goes here with consistant indentation... #}
-----END RSA PRIVATE KEY-----
{% elif grains['fqdn'] == 'server2.example.com' %}
# same as above but …Run Code Online (Sandbox Code Playgroud) 我有一个运行Gerrit触发器插件的Jenkins服务器用于持续集成.对于运行单元测试和样式检查,它的工作非常出色!
但是,我也有兴趣使用Jenkins来构建我们的部署包.
理想情况下,开发人员会将标记推送到Gerrit,而gerrit-trigger插件会通知Jenkins构建标记,并适当地部署它们.
有没有办法通过jenkins和gerrit配置它,而不是使用Gerrit的git repos中的钩子发布到Jenkins的REST API,或使用浪费的滞后SCM轮询?
我怀疑可能有办法做到这一点,但我不太清楚从哪里开始.
使用salt 2014.7.0,我可以将以下内容添加到minion配置中:
mine_functions:
cmd.run: [echo hello]
Run Code Online (Sandbox Code Playgroud)
然后,在盐管理器上,我可以看到我的“测试”小兵正在从矿山检索“你好”:
salt 'test' mine.update
salt 'test' mine.get 'test' cmd.run
test:
----------
test:
hello
Run Code Online (Sandbox Code Playgroud)
这一切都很好。但是,我想使用我的函数别名而不是cmd.run句柄。该文档尚不清楚如何执行此操作,到目前为止我没有尝试过任何方法。以下尝试失败:
在mine_function中传递参数:
mine_functions:
say_hello:
mine_function:
cmd.run: [echo hello]
Run Code Online (Sandbox Code Playgroud)
将参数作为“名称”字段传递:
mine_functions:
say_hello:
mine_function: cmd.run
name: echo hello
Run Code Online (Sandbox Code Playgroud)
将argments作为“ args”列表传递:
mine_functions:
say_hello:
mine_function: cmd.run
args: [echo hello]
Run Code Online (Sandbox Code Playgroud)
但是,这些都不能产生期望的结果,可以通过say_hello别名访问“ hello”,即:
salt 'test' mine.update
salt 'test' mine.get 'test' say_hello
test:
----------
test:
hello
Run Code Online (Sandbox Code Playgroud)
使用矿山函数别名时,将参数传递给矿山函数的正确方法是什么?