我需要在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 ====='
'''
}
最佳答案
您需要将Jenkins作业(包含python项目)的工作空间作为卷安装(请参阅“docker run -v”选项)到您的容器,然后在该容器中运行“下一步”构建步骤。您可以通过提供 shell 脚本作为项目源代码的一部分来执行此操作,该脚本将执行“下一步”或在上一个构建阶段中编写此脚本。
就像这样:
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
关于docker - 在Jenkins中构建和运行Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56083531/