我已经用gitlab和docker构建了一个CI/CD。在我的gitlab-ci.yml中,我只写命令来构建和启动容器以运行测试,就这样
现在我正在寻找一种方法,用GOCD ci/cd服务器做同样的事情。但gocd的官方文档直接来自Docker中的kubernetees或Docker或Docker之外的Docker。我不需要这个。
我有一个GOCD服务器和两个GOCD代理。
我想构建并运行一个容器,也许可以部署它。我找不到一个简单的教程来在GOCD上制作一个有三个阶段的管道:
- 构建图像
- 运行容器并对其进行测试
- 部署
最后,我能够让它自己工作,以下是步骤:
先决条件:
- 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上:
创建管道
创建一个阶段
创建作业
创建一个或多个任务
-->添加新任务->选择";更多";您将有可能添加一个自定义命令
此时,您可以在单元格中添加";命令";
/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权限。