说明
GoCD是一个开源的持续集成和持续交付(CI/CD)工具,它提供了直观的界面和强大的功能,帮助团队自动化复杂的构建和部署流程。GoCD支持多种部署策略,包括蓝绿部署、滚动部署等,并提供了丰富的插件和扩展点。
采用敏捷开发以后,自动化集成和部署的必要性越来越大,每天可以节省大量的时间。对比之后,采用GoCD作为持续集成和部署的工具。
GoCD分为两个部分:gocd-server 和 gocd-agent 需要分别进行安装。可以安装在同一台主机上,也可以安装在不同的主机上。
服务端提供了统一的任务管理,相关的任务会分配给不同的代理服务器(gocd-agent)上来执行。
参考中文文档: https://gocd.org.cn/#/
使用docker运行gocd-server
基本运行
启动容器:
$ docker run -d -p8153:8153 gocd/gocd-server:v23.5.0
这将在服务器上公开容器端口8153(http),您现在可以打开http://localhost:8153
挂载目录
挂载、插件和日志存储到/godata中。
如果您想提供SSH私钥等安全凭据,您可以挂载/home/go
。
docker run -v /path/to/godata:/godata -v /path/to/home-dir:/home/go gocd/gocd-server:v23.5.0
注意:确保/path/to/home-dir和/path/to-godata可由容器中的go用户访问(go user-uid 1000)。
安装插件
所有插件都可以安装在/godata下。
使用环境配置安装插件
要安装插件,只需添加一个ENV变量,前缀为GOCD_PLUGINinstall,后缀为名称,值为下载URL。
只有当插件还不存在时,才会下载该插件。
示例:
GOCD_PLUGIN_INSTALL_docker-elastic-agents=https://github.com/gocd-contrib/docker-elastic-agents/releases/download/v0.8.0/docker-elastic-agents-0.8.0.jar
docker run \
-e GOCD_PLUGIN_INSTALL_docker-elastic-agents=https://github.com/gocd-contrib/docker-elastic-agents/releases/download/v0.8.0/docker-elastic-agents-0.8.0.jar \
gocd/gocd-server:v23.5.0
要安装多个插件,请添加几个-e参数,如下所示:
docker run \
-e GOCD_PLUGIN_INSTALL_a-plugin=https://example.com/a-plugin.jar \
-e GOCD_PLUGIN_INSTALL_b-plugin=https://example.com/b-plugin.jar \
gocd/gocd-server:v23.5.0
使用自定义入口点脚本安装插件
mkdir -p /godata/plugins/external
curl --location --fail https://example.com/plugin.jar > /path/to/godata/plugins/external/plugin.jar
chown -R 1000 /godata/plugins/external
从现有git仓库加载配置
要从git仓库加载现有配置,只需添加一个ENV变量CONFIG_git_repo。
Auth令牌可用于访问私有仓库,默认情况下会克隆master 分支,要加载另一个分支,请定义ENV变量CONFIG_GIT_branch。
如果/godat/config已经是git仓库,那么config_git_repo将被忽略。
克隆的仓库必须包含/godat/config目录中的所有文件。
docker run \
-e CONFIG_GIT_REPO=https://gocd_user:/config.git \
-e CONFIG_GIT_BRANCH=branch_with_config \
gocd/gocd-server:v23.5.0
签出的内容将覆盖/godata/config中的文件/
运行自定义入口点entrypoint脚本
To execute custom script(s) during the container boostrap, but before the GoCD server starts just add -v /path/to/your/script.sh:/docker-entrypoint.d/your-script.sh
like so:
docker run -v /path/to/your/script.sh:/docker-entrypoint.d/your-script.sh ... gocd/gocd-server:v23.5.0
If you have several scripts in a directory that you'd like to execute:
docker run -v /path/to/script-dir:/docker-entrypoint.d ... gocd/gocd-server:v23.5.0
Note: Ensure that your scripts are executable
chmod a+x
— you can add as many scripts as you like,bash
is available on the container. If your script uses other scripting language (perl, python), please ensure that the scripting language is installed in the container.
调整JVM选项(内存、堆等)
Tweaking JVM options (memory, heap etc)
JVM选项可以使用环境变量GOCD_SERVER_JVM_OPTS进行调整。
docker run -e GOCD_SERVER_JVM_OPTS="-Xmx4096mb -Dfoo=bar" gocd/gocd-server:v23.5.0
目录说明
GoCD服务器以go用户的身份运行,各种目录的位置为:
Directory | Description |
---|---|
/godata/artifacts |
存储GoCD工件的目录 |
/godata/config |
存储GoCD配置configuration的目录 |
/godata/db |
存储GoCD数据库和配置更改历史记录的目录 |
/godata/logs |
GoCD日志将写入的目录 |
/godata/plugins |
包含GoCD插件的目录 |
/home/go |
GoCD服务器的主目录 |
确定主机上的服务器IP和端口
一旦GoCD服务器启动,我们应该能够通过以下操作确定其ip地址和映射到主机上的端口:
docker容器中GoCD服务器的ip地址和端口非常重要,因为GoCD代理将使用它们来连接到它
docker run --name server -it -p8153:8153 gocd/gocd-server:v23.5.0
然后,以下命令将确定到GoCD服务器的IP、服务器端口和ssl端口
docker inspect --format='{{(index (index .NetworkSettings.IPAddress))}}' server
docker inspect --format='{{(index (index .NetworkSettings.Ports "8153/tcp") 0).HostPort}}' server
以非root运行GoCD容器
在v19.6.0版本中,默认情况下,GoCD容器将以非root用户身份运行。
Dockerized GoCD应用程序将以用户go(uid:1000)和组root(gid:0)运行,而不是以用户root(uid:0)和组根(gid:0)运行。
故障排除Troubleshooting
GoCD服务器未启动
- 检查docker容器是否正在运行
docker ps -a
- 检查STDOUT,查看是否有任何指示故障的输出
docker logs CONTAINER_ID
- 检查服务器日志
docker exec -it CONTAINER_ID tail -f /godata/logs/go-server.log
使用docker运行gocd-agent
GoCD Agent Docker镜像
此存储库是以下docker映像的父存储库:
- gocd/gocd-agent-alpine-3.6
- gocd/gocd-agent-alpine-3.7
- gocd/gocd-agent-alpine-3.8
- gocd/gocd-agent-alpine-3.9
- gocd/gocd-agent-centos-6
- gocd/gocd-agent-centos-7
- gocd/gocd-agent-debian-8
- gocd/gocd-agent-debian-9
- gocd/gocd-agent-docker-dind
- gocd/gocd-agent-ubuntu-14.04
- gocd/gocd-agent-ubuntu-16.04
- gocd/gocd-agent-ubuntu-18.04
- gocd/docker-gocd-agent-fedora-28
- gocd/docker-gocd-agent-fedora-29
基本运行
这里以centos7版本为例
docker run -d -e GO_SERVER_URL=... gocd/gocd-agent-centos-7:v23.3.0
提示:
这将启动GoCD代理,并将其连接到 GO_server_URL 指定的GoCD服务器(gocd-server)。
GO_SERVER_URL必须是HTTPS URL并以/GO结尾,例如。http://ip.add.re.ss:8153/go
与docker GoCD服务器一起使用
gocd-agent和gocd-server在同一台服务器上
如果运行的是一个名为angry_feynman的gocd服务器容器,则可以通过以下操作将gocd代理容器连接到该容器:
docker run -d -e GO_SERVER_URL=http://$(docker inspect --format='{{(index (index .NetworkSettings.IPAddress))}}' angry_feynman):8153/go gocd/gocd-agent-centos-7:v23.3.0
如果运行GoCD服务器的docker容器具有映射到主机的端口,
docker run -d -e GO_SERVER_URL=http://:$(docker inspect --format='{{(index (index .NetworkSettings.Ports "8153/tcp") 0).HostPort}}' angry_feynman)/go gocd/gocd-agent-centos-7:v23.3.0
可用配置选项
自动注册agents
docker run -d \
-e AGENT_AUTO_REGISTER_KEY=... \
-e AGENT_AUTO_REGISTER_RESOURCES=... \
-e AGENT_AUTO_REGISTER_ENVIRONMENTS=... \
-e AGENT_AUTO_REGISTER_HOSTNAME=... \
gocd/gocd-agent-centos-7:v23.3.0
如果提供了AGENT_AUTOREGISTER*变量(我们建议您这样做),则服务器将自动批准代理。
配置SSL
要配置SSL参数,请使用环境变量AGENT_BOOTSTRAPPER_ARGS传递参数。
docker run -d \
-e AGENT_BOOTSTRAPPER_ARGS='-sslVerificationMode NONE ...' \
gocd/gocd-agent-centos-7:v23.3.0
挂载卷
GoCD代理将在/godata中存储所有配置、日志和执行构建。如果您想提供SSH私钥等安全凭据,则可以挂载/home/go。
docker run -v /path/to/godata:/godata -v /path/to/home-dir:/home/go gocd/gocd-agent-centos-7:v23.3.0
注意:确保/path/to/home-dir和/path/to-godata可由容器中的go用户访问(go user-uid 1000)。
调整JVM选项(内存、堆等)
JVM选项可以使用环境变量GOCD_AGENT_JVM_OPTS进行调整。
docker run -e GOCD_AGENT_JVM_OPTS="-Dfoo=bar" gocd/gocd-agent-centos-7:v23.3.0
目录说明
Directory | Description |
---|---|
/godata/config |
the directory where the GoCD configuration is stored |
/godata/pipelines |
the directory where the agent will run builds |
/godata/logs |
the directory where GoCD logs will be written out to |
/home/go |
the home directory for the GoCD server |