本系列文章手把手教你打造一套从代码提交到服务部署的完整流水线。我将以一个 SpringBoot
程序为例。
目标
流程梳理
首先梳理一下整个流水线需要完成的工作
- 拉取最新代码
- 基于最新代码,生成
jar
包 - 构建应用程序
docker
镜像 - 将
docker
镜像部署推送到DockerHub
仓库 - 登录应用服务器,完成应用的部署工作
定制化功能分析
根据上述梳理的结果,GoCD 需要集成以下这些功能
-
JDK8
:用于编译SpringBoot
程序,生成jar
包 -
docker
:用于构建应用程序镜像 -
expect
:用于登录远程服务器,完成应用部署的工作
步骤
定制镜像
gocd-server 镜像
该镜像基于 gocd 官方提供的镜像 集成了JDK8
环境,详细步骤参考 GoCD 整行记(一):定制 gocd-server
docker pull hezhong0711/gocd-server-jdk8
gocd-agent 镜像
基于 官方提供的 gocd-agent 镜像 集成了 JDK8
/ docker
/ expect
环境,详细步骤参考 GoCD 整行记(二):定制 gocd-agent
docker pull hezhong0711/gocd-agent-jdk8
启动环境
启动 gocd-server 容器
-
启动容器
docker run -d -p8153:8153 \ -e GOCD_PLUGIN_INSTALL_docker-registry-artifact-plugin=https://github.com/gocd/docker-registry-artifact-plugin/releases/download/v1.3.0-138-exp/docker-registry-artifact-plugin-1.3.0-138.jar \ hezhong0711/gocd-server-jdk8
- 启动时安装了
docker-registry-artifact-plugin
插件,安装方法参考官方文档
- 启动时安装了
-
查看启动结果
➜ ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8a4d531691c4 hezhong0711/gocd-server-jdk8 "/docker-entrypoint.…" 31 hours ago Up 31 hours 0.0.0.0:8153->8153/tcp focused_franklin
- 找到容器的
NAMES
值:focused_franklin
,后面会用到
- 找到容器的
-
浏览器打开 http://localhost:8153 可以看到
GoCD
启动界面
启动 gocd-agent 容器
-
启动容器
docker run -d \ -e GO_SERVER_URL=http://$(docker inspect --format='{{(index (index .NetworkSettings.IPAddress))}}' GOCD_SERVER_NAMES):8153/go \ -v '/var/run/docker.sock:/var/run/docker.sock:rw' hezhong0711/gocd-agent-jdk8:latest
- 将
GOCD_SERVER_NAMES
替换为上一步查看的NAMES
即可
- 将
浏览器打开 http://localhost:8153/go/agents ,可以看到刚刚创建的
Agent
节点,此时状态为Pending
- 启用节点:勾选节点 -> 点击
ENABLE
按钮
启用后,状态变为 Idle
至此,GoCD
环境启动完成!