我需要在Jenkins中运行docker容器,以便可以在以下步骤中运行诸如pycodestyle
之类的已安装库。
>> <<
代码)谢谢
stage('Build') {
// Install python libraries from requirements.txt (Check Dockerfile for more detail)
sh "docker login -u '${DOCKER_USR}' -p '${DOCKER_PSW}' ${DOCKER_REGISTRY}"
sh "docker build \
--tag '${DOCKER_REGISTRY}/${DOCKER_TAG}:latest' \
--build-arg HTTPS_PROXY=${PIP_PROXY} ."
>> sh "docker run -ti ${DOCKER_REGISTRY}/${DOCKER_TAG}:latest sh" <<<
}
}
stage('Linting') {
sh '''
awd=$(pwd)
echo '===== Linting START ====='
for file in $(find . -name '*.py'); do
filename=$(basename $file)
if [[ ${file:(-3)} == ".py" ]] && [[ $filename = *"test"* ]] ; then
echo "perform PEP8 lint (python pylint blah) for $filename"
cd $awd && cd $(dirname "${file}") && pycodestyle "${filename}"
fi
done
echo '===== Linting END ====='
'''
}
答案 0 :(得分:2)
您需要将Jenkins作业的工作空间(包含python项目)作为卷安装(请参阅“ docker run -v”选项)到您的容器,然后在该容器中运行“下一步”构建步骤。您可以通过提供外壳脚本作为项目源代码的一部分来执行此操作,该脚本将执行“下一步”或在上一个构建阶段编写该脚本。
会是这样的:
sh "chmod +x build.sh"
sh "docker run -v $WORKSPACE:/workspace ${DOCKER_REGISTRY}/${DOCKER_TAG}:latest /workspace/build.sh"
build.sh是一个可执行脚本,它是项目工作区的一部分,并执行“下一步”。
$ WORKSPACE是您的jenkins作业使用的文件夹(通常为/ var / jenkins_home / jobs // workspace-由Jenkins作为build variable提供。
请注意:此解决方案要求Docker守护程序与Jenkins在同一主机上运行!否则,工作空间将对您的容器不可用。
另一种解决方案是将Jenkins作为Docker容器运行,因此您可以与在构建作业中运行的容器轻松共享Jenkins的home / workspace,如此处所述:
Running Jenkins tests in Docker containers build from dockerfile in codebase