我在dockerhub中有一个Docker映像,我想作为代理添加到我的jenkins管道脚本中。作为图像的一部分,我执行git clone从github获取一个存储库,该存储库具有多个python脚本,这些脚本对应于我的jenkins管道中的多个阶段。我尝试在所有地方搜索,但是找不到有关如何访问jenkins管道中docker容器内文件的相关信息。
我在VM上运行jenkins,并且已安装docker。管道在docker容器上执行构建。由于管道的每个阶段都涉及许多步骤,因此我尝试尽可能多地使用python API。
这是我的dockerfile的外观,图像成功构建,并且能够将其托管在dockerhub中。运行容器时,我可以看到“ jenkins_pipeline_scripts”目录,其中包含管道阶段所需的所有python脚本。
FROM ros:melodic-ros-core-stretch
RUN apt-get update && apt-get -y install python-pip
RUN git clone <private-repo with token>
这就是我当前的jenkins管道脚本的样子。
pipeline {
agent {
docker {
image '<image name>'
registryUrl 'https://registry.hub.docker.com'
registryCredentialsId 'docker-credentials'
args '--network host -u root:root'
}
}
stages {
stage('Test') {
steps {
sh 'python jenkins_pipeline_scripts/scripts/test.py'
}
}
}
}
这是我执行作业时遇到的错误。
$ docker top 05587cd75db5c4282b86b2f1ded2c43a0f4eae161d6c7d7c03d065b0d45e1 -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
+ python jenkins_pipeline_scripts/scripts/test.py
python: can't open file 'jenkins_pipeline_scripts/scripts/test.py': [Errno 2] No such file or directory
答案 0 :(得分:0)
Jenkins Pipeline启动代理容器时,它将通过WORKDIR
选项更改容器的-w
,并通过-v
选项挂载Jenkins作业的工作空间文件夹。
由于这两个选项,Jenkins作业的工作空间文件夹将成为容器的WORKDIR
。
以下是我的jenkins作业控制台输出:
docker run -t -d -u 29001:100
-w /bld/workspace/test/agent-poc
-v /bld/workspace/test/agent-poc:/bld/workspace/test/agent-poc:rw,z
-v /bld/workspace/test/agent-poc@tmp:/bld/workspace/test/agent-poc@tmp:rw,z
-e ******** -e ******** -e ******** -e ********
docker.hub.com/busybox cat
您在构建映像时克隆了代码,它们不在WORKDIR
内,因此不会报告此类文件错误。
两种解决问题的方法。
1)首先,将您的代码文件夹CD上,您应该知道该路径。
stage('Test') {
steps {
sh '''
cd <your code folder in container>
python jenkins_pipeline_scripts/scripts/test.py
'''
}
}
2)将git clone代码仓库从Dockerfile移到管道阶段
正如我在开始时所解释的,您工作的工作空间将成为容器的WORKDIR
,
因此,您可以通过管道步骤将代码克隆到jenkins作业工作区中,而无需进行cd <your code folder in container>
。