Jenkins Pipeline插件是否支持Do cker Compose?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins Pipeline插件是否支持Do cker Compose?相关的知识,希望对你有一定的参考价值。
我正在寻找一种方法来运行由Jenkins 2.0中的多个容器组成的支持Docker的构建。
是否有任何计划在Pipeline中对Docker Compose进行原生支持,或者通过CloudBees docker插件进行管道。
或者可以/必须通过显式调用sh docker-compose...
来解决这个问题吗?甚至可以在try... finally
中使用它们来进一步控制服务生命周期。
编辑:第一个答案是建议一种在jenkins中构建docker容器的方法。这不是这里所需要的。我(EngineerDollery)希望使用compose在jenkins中启动我的目标平台,以便我可以将我的应用程序部署到它并运行端到端测试。
在Jenkins bug tracking搜索之后,JENKINS-35025建议在使用docker-compose.yml
在docker容器中运行作业时考虑maven build。
另请参阅Creating CI pipeline with Jenkins,它假设您的Jenkins服务器上安装了docker-compose。
注意:一年后(2017年8月),docker-compose is still not supported in the Docker Pipeline plugin
2018年7月,Ivan Aracki注意到in the comments:
手动安装与主机相同版本的
docker-cli
和docker-compose
是现在的解决方案......
以下是运行在其中运行docker的jenkins容器的文件:
docker run
-p 8080:8080
-v /var/run/docker.sock:/var/run/docker.sock
--name jenkins
getintodevops/jenkins-withdocker:lts
参考:https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci
我面临着类似的问题,我发现这个https://reinout.vanrees.org/weblog/2017/10/03/docker-compose-in-jenkins.html,但我不知道有什么关系。
我的问题是在开发时测试,并且还在Jenkins中自动化测试,我使用docker-compose来调出一些php脚本和一个mysql服务器,以运行隔离测试(截至目前的phpunit)。
我能想到我能做到这一点
- 在docker host中创建一个网络(使用
docker network create
) - 创建并运行连接到该网络的mysql docker(使用
docker run mysql --network=netname --name=mysqlmachine
- 由jenkins运行脚本指定--network并将qazxsw poi称为主机。
但这意味着我需要设置db数据,清理db数据,并且即使在不需要时也总是留在mysqlmachine上,消耗一些ram资源。我可以在定义管道的Jenkinsfile中用mysqlmachine
和docker start mysqlmachine
命令解决最后一个问题。
但是,再次,在jenkins运行的docker中执行shell我找不到docker stop mysqlmachine
命令
对我来说是一个可行的解决方案,直到我找不到更好的东西
更新:我将尝试docker
解决方案,它几乎我需要的
更新08.02:正如亚历山大·齐特勒所建议的,使用
https://wiki.jenkins.io/display/JENKINS/Docker+Slaves+Plugin
在Jenkins文件中允许使用docker-compose命令:docker在docker里面,这里主要是docker附近的docker,如下所示:agent {
docker {
image 'pdmlab/jenkins-node-docker-agent:6.11.1'
args '-v /var/run/docker.sock:/var/run/docker.sock'
}
}
但我更喜欢使用另一种方法,不需要以特殊方式运行jenkins。
管道说:
Docker in Docker - volumes not working: Full of files in 1st level container, empty in 2nd tier
和build_docker.sh做:
stage('Test') {
steps {
sh './build_docker.sh jenkinstests'
}
}
此外 jenkinstests)
docker volume create idealodbconn
docker run -v idealodbconn:/data --name helper busybox true
docker cp ./dbconn/db249.json helper:/data
docker rm helper
docker-compose -f services/docker-compose-jenkins.yml up
--abort-on-container-exit
--exit-code-from idealoifapi
docker-compose -f services/docker-compose-jenkins.yml rm -f
docker volume rm idealodbconn
;;
说退出一次定义到docker-compose-jenkins.yml的容器退出,--abort-on-container-exit
说要从idealoifapi图像中取出退出代码。
就这些。可能缺少的部分是docker-compose-jenkins.yml使用的卷,它是外部的:true:
--exit-code-from idealoifapi
以上是关于Jenkins Pipeline插件是否支持Do cker Compose?的主要内容,如果未能解决你的问题,请参考以下文章
(转)Jenkins2.0 Pipeline 插件执行持续集成发布流程