Jenkins Pipeline插件是否支持Do cker Compose?

问题描述 投票:33回答:3

我正在寻找一种方法来运行由Jenkins 2.0中的多个容器组成的支持Docker的构建。

是否有任何计划在Pipeline中对Docker Compose进行原生支持,或者通过CloudBees docker插件进行管道。

或者可以/必须通过显式调用sh docker-compose...来解决这个问题吗?甚至可以在try... finally中使用它们来进一步控制服务生命周期。


编辑:第一个答案是建议一种在jenkins中构建docker容器的方法。这不是这里所需要的。我(EngineerDollery)希望使用compose在jenkins中启动我的目标平台,以便我可以将我的应用程序部署到它并运行端到端测试。

jenkins docker jenkins-pipeline
3个回答
12
投票

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-clidocker-compose是现在的解决方案......


2
投票

以下是运行在其中运行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


0
投票

我面临着类似的问题,我发现这个https://reinout.vanrees.org/weblog/2017/10/03/docker-compose-in-jenkins.html,但我不知道有什么关系。

我的问题是在开发时测试,并且还在Jenkins中自动化测试,我使用docker-compose来调出一些php脚本和一个mysql服务器,以运行隔离测试(截至目前的phpunit)。

我能想到我能做到这一点

  1. 在docker host中创建一个网络(使用docker network create
  2. 创建并运行连接到该网络的mysql docker(使用docker run mysql --network=netname --name=mysqlmachine
  3. 由jenkins运行脚本指定--network并将qazxsw poi称为主机。

但这意味着我需要设置db数据,清理db数据,并且即使在不需要时也总是留在mysqlmachine上,消耗一些ram资源。我可以在定义管道的Jenkinsfile中用mysqlmachinedocker 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
© www.soinside.com 2019 - 2024. All rights reserved.