使用gocd CI/CD运行docker容器



我已经用gitlab和docker构建了一个CI/CD。在我的gitlab-ci.yml中,我只写命令来构建和启动容器以运行测试,就这样

现在我正在寻找一种方法,用GOCD ci/cd服务器做同样的事情。但gocd的官方文档直接来自Docker中的kubernetees或Docker或Docker之外的Docker。我不需要这个。

我有一个GOCD服务器和两个GOCD代理。

我想构建并运行一个容器,也许可以部署它。我找不到一个简单的教程来在GOCD上制作一个有三个阶段的管道:

  1. 构建图像
  2. 运行容器并对其进行测试
  3. 部署

最后,我能够让它自己工作,以下是步骤:

先决条件:

  • docker ce和docker compose必须安装在每个代理上
  • go用户必须在组docker上
  • /var/run/doker.sock必须处于模式666
  • 每个代理都必须能够访问您的gitlab/github/repository集线器,并且必须在第一次连接之前添加指纹主机

手动添加每个gocd代理上的指纹主机,您必须以go用户身份连接(或者不要忘记将正确的所有者设置为known_hosts文件(:

ssh-keyscan -H your.repository.com >> /var/go/.ssh/known_hosts

然后在gocd服务器ui上:

  1. 创建管道

  2. 创建一个阶段

  3. 创建作业

  4. 创建一个或多个任务

    -->添加新任务->选择";更多";您将有可能添加一个自定义命令

此时,您可以在单元格中添加";命令";

/usr/bin/docker

或者(取决于您的用例(

/usr/local/bin/docker-compose

在自变量列表中,逐行列出一个自变量

build
.
-f
dockerfile
-t
yourrepository/tagOfYourImage

之后,不要忘记,在每次运行之前和之后都要清理容器和创建的图像。您也可以使用"/bin/bash";在小区中";命令";然后是两个自变量

-c
"/usr/bin/docker rmi $(/usr/bin/docker image ls|/usr/bin/grep server_php|/usr/bin/awk '{ print $3 }'|/usr/bin/tr 'r' ' ') --force||true"

温馨提示:

如果你想让你的所有工作在每个代理上都取得成功,不要忘记选择";在所有代理上运行";在选项卡"中;作业设置";。

更新:

如果你重新启动docker服务或你的一个代理,它会删除/var/run/docker.sock上的666权限,将用户添加到组docker对我没有帮助。我必须再次为此文件设置666权限。

最新更新