运行 带有 gocd CI/CD 的 docker 容器

Run a docker container with gocd CI/CD

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

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

我有一个 GOCD-server 和两个 GOCD-agents。

我想构建和 运行 一个容器并可能部署它。我无法在 GOCD 上找到制作三阶段流水线的简单教程:

  1. 构建图像;
  2. 运行容器并测试它;
  3. 部署。

终于,我自己搞定了,步骤如下:

先决条件ui站点:

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

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

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

然后在 gocd-server ui:

  1. 创建管道

  2. 创建舞台

  3. 创建工作

  4. 创建一个或多个任务

    --> 添加新任务 -> 选择“更多”,您将有可能添加自定义命令

此时,您可以在单元格中添加“commands”

 /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  }'|/usr/bin/tr '\r' ' ') --force||true"

提示:

如果您希望所有作业在每个代理上都成功,请不要忘记在“作业设置”选项卡中选择选项“运行 在所有代理上”。

更新:

如果你重新启动 docker 服务或你的代理之一,它将删除 /var/run/docker.sock 上的 666 权限,添加用户去组 docker 没有帮我。我又要给这个文件设置666权限了