运行 带有 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 上找到制作三阶段流水线的简单教程:
- 构建图像;
- 运行容器并测试它;
- 部署。
终于,我自己搞定了,步骤如下:
先决条件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:
创建管道
创建舞台
创建工作
创建一个或多个任务
--> 添加新任务 -> 选择“更多”,您将有可能添加自定义命令
此时,您可以在单元格中添加“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权限了
我已经用 gitlab 和 docker 构建了一个 CI/CD。在我的 gitlab-ci.yml 中,我只是编写命令来构建和启动容器以进行 运行 测试,仅此而已。
现在我正在寻找一种方法来用 GOCD ci/cd 服务器做同样的事情。但是gocd的官方文档直接来kubernetees或者Docker里面的Docker或者Docker外面的Docker。我不需要这个。
我有一个 GOCD-server 和两个 GOCD-agents。
我想构建和 运行 一个容器并可能部署它。我无法在 GOCD 上找到制作三阶段流水线的简单教程:
- 构建图像;
- 运行容器并测试它;
- 部署。
终于,我自己搞定了,步骤如下:
先决条件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:
创建管道
创建舞台
创建工作
创建一个或多个任务
--> 添加新任务 -> 选择“更多”,您将有可能添加自定义命令
此时,您可以在单元格中添加“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权限了