直接上结果
GitHub 项目地址
基于官方提供的 gocd-agent 镜像集成以下环境
- JDK8: 用于编译 Java 程序
- docker: 用于打包 docker 镜像
- expect: 用于远程部署
docker pull hezhong0711/gocd-agent-jdk8
步骤
agent.dockerfile
FROM gocd/gocd-agent-alpine-3.12:v21.1.0
MAINTAINER HeZhong "hezhong0711@gmail.com"
# 切换到 root 用户
USER root
# 安装 expect、jdk、docker
RUN apk update && apk add expect && apk add openjdk8 && apk add docker && apk add openrc
# 将 entrypoint.sh 复制到容器中
COPY entrypoint.sh .
# 给脚本添加执行权限
RUN chmod +x entrypoint.sh
# 容器启动时执行脚本
ENTRYPOINT ["/entrypoint.sh"]
# 切换到 go 用户
USER go
exntrypoint.sh
#!/bin/bash
# 将 docker.sock 授权给 go 用户,否则 docker 命令无法正常工作
chown go /var/run/docker.sock
# 启动 gocd-agent 程序
bash /docker-entrypoint.sh
构建 docker 镜像
docker build -f agent.dockerfile -t hezhong0711/gocd-agent-jdk8 .
启动容器
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,再启动 gocd-agent
-
GOCD_SERVER_NAMES
为 gocd-server 容器的NAMES
值,参考GoCD 整行记(一):定制 gocd-server
说明
docker 命令集成的坑
- 要在 docker 容器中集成 docker 命令,需要将宿主机的
/var/run/docker.sock
文件挂载到 docker 中,参考启动容器
命令中的-v '/var/run/docker.sock:/var/run/docker.sock:rw'
参数 - 由于 gocd-agent 启动后用户会切换到
go
用户,所以需要修改/var/run/docker.sock
的权限给go
用户,参考exntrypoint.sh
脚本中的chown go /var/run/docker.sock
命令