我还有一个问题,就是通过Jenkins声明性管道运行Docker的权限。我想通过Docker容器中的Jenkins作业构建并发布Python包:
pipeline {
agent {
docker {
image 'python:3.7'
label 'docker && linux'
}
}
environment {
PACKAGE_VERSION = readFile 'VERSION'
}
stages {
stage('Package') {
steps {
sh 'python -V'
sh 'python -m pip install -r requirements.txt --user --no-cache'
sh 'python setup.py sdist'
}
}
stage('Deploy') {
steps {
...
}
}
}
post {
always {
cleanWs()
}
}
}
但是,我不允许pip安装
由于PermissionError
:
python-mpip安装-r要求。txt——用户——没有缓存要求已经满足:setuptools位于/usr/local/lib/python3中。7/站点包(来自-r requirements.txt(第1行))(40.0.0)收集pytest(来自-r requirements.txt(第2行))
下载https://files.pythonhosted.org/packages/9e/a1/8166a56ce9d89fdd9efcae5601e71758029d90e5644e0b7b6eda07e67c35/pytest-3.7.0-py2.py3-none-any.whl(202kB)收集数据
由于环境错误,无法安装软件包:[Errno 13]权限被拒绝:/。本地检查权限。
如何修复这些权限?
withEnv([“HOME=${env.WORKSPACE}]”){}
是键。此外,它还可以像这样使用:
node {
def customImage = docker.build(...)
customImage.inside {
withEnv(["HOME=${env.WORKSPACE}"]) {
sh '...'
}
}
}
在Jenkins系统上设置Docker代理后,我运行了一个非常类似的管道,所以我认为我的设置是错误的。使用您的帖子中的注释,我制定了以下解决方案:
首先,您需要是容器中的root用户,因此将代理声明更改为类似于以下内容:
agent {
docker {
image "python:3.7"
args '--user 0:0'
}
}
现在我可以使用pip安装了
!但是,该作业的后续运行将尝试运行git clean
,并失败,因为容器中的构建文件是由root创建的。为了解决这个问题,我在容器中运行了clean命令作为我的最后一步:
steps {
sh 'git clean -fdx'
}
更新:
我发现了一个问题,一个失败的构建无法清理,并在它之后杀死了所有的构建。为了解决这个问题,我将clean操作作为始终运行的构建后任务:
post {
cleanup {
cleanWs()
}
}
我找到了我自己认为更漂亮的解决方案:
stage("Python Test") {
agent {
docker {
label "docker && linux"
image "python:3.7"
}
}
steps {
withEnv(["HOME=${env.WORKSPACE}"]) {
sh "pip install -r requirements.txt --user"
# python stuff
}
}
post {
cleanup {
cleanWs()
}
}
}
此解决方案完全围绕问题本身,在用户级别安装软件包。这里的问题是主目录最初也不可写,因此会覆盖主目录。
问题内容: 我 又 通过詹金斯声明管道运行的泊坞权限问题。我想通过Docker容器中的Jenkins作业构建和发布Python包: 但是,由于以下原因,我不被允许: + python -m pip install -r requirements.txt –user –no- cache要求已经满足:/usr/local/lib/python3.7/site-packages中的setuptools
问题内容: 我已经尝试过将docker和jenkins一起使用,两者都安装在我的机器上(w10),并且我使用jankins运行docker镜像。但是,当我按照jenkins文档中的示例(来自doc的示例)时,它不起作用。不涉及时,不同的管道脚本可以工作,我还尝试从jenkins config接口添加。 管道脚本 错误堆栈 我在SO上发现了类似的问题\(相同但没有明确的解决方案) 问题答案: 您的工
我查看了以下文档:https://docs.sonarqube.org/display/scan/analysy+with+sonarqube+scanner+for+jenkins 然而,我不能让它工作。首先,文档似乎需要更新,因为示例中的语法是错误的。在最新版本的声明性管道中,在-tag中是必需的。此外,-关键字只有在-标记中才会解析。 null
问题内容: 我正在使用声明性Jenkins管道来运行我的一些构建管道,并且想知道是否可以定义多个代理标签。 我有许多构建代理与我的Jenkins挂钩,并且希望此特定管道能够由具有不同标签的各种代理(但不能由ALL代理)构建。 更具体地说,假设我有2个代理,标签为“小”,4个为标签“中”,有6个为标签“大”。现在,我有一个非常节省资源的管道,我希望仅在“小型”或“中型”代理上执行,而不在大型代理上执
问题内容: 我正在尝试将旧样式的基于项目的工作流转换为基于Jenkins的管道。在浏览文档时,我发现有两种不同的语法分别命名为和。例如最近(2016年底)发布的Jenkins网络语法。尽管有一个新的语法版本,Jenkins仍然也支持脚本语法。 现在,我不确定这两种类型的哪种情况最合适。语法将很快被弃用吗?詹金斯管道的未来会是这样吗? 任何可以分享有关这两种语法类型的想法的人。 问题答案: 最初创建
我有一个Jenkins声明性管道,我一直在Jenkins master上运行,它工作得很好。但是,现在我已经开始尝试在从属节点上执行此操作,管道中调用的groovy脚本无法访问工作区中的文件。 我的文件看起来像这样。。。 我可以在从机上看到它正在创建工作区,从git执行签出,并正确执行脚本。但是,如果脚本中的某些内容尝试与工作区中的文件交互,则会失败。 如果我有像这样简单的东西... ...它说找