直接上結(jié)果
GitHub 項(xiàng)目地址
基于官方提供的 gocd-agent 鏡像集成以下環(huán)境
- JDK8: 用于編譯 Java 程序
- docker: 用于打包 docker 鏡像
- expect: 用于遠(yuǎn)程部署
docker pull hezhong0711/gocd-agent-jdk8
步驟
agent.dockerfile
FROM gocd/gocd-agent-alpine-3.12:v21.1.0
MAINTAINER HeZhong "hezhong0711@gmail.com"
# 切換到 root 用戶(hù)
USER root
# 安裝 expect景图、jdk别洪、docker
RUN apk update && apk add expect && apk add openjdk8 && apk add docker && apk add openrc
# 將 entrypoint.sh 復(fù)制到容器中
COPY entrypoint.sh .
# 給腳本添加執(zhí)行權(quán)限
RUN chmod +x entrypoint.sh
# 容器啟動(dòng)時(shí)執(zhí)行腳本
ENTRYPOINT ["/entrypoint.sh"]
# 切換到 go 用戶(hù)
USER go
exntrypoint.sh
#!/bin/bash
# 將 docker.sock 授權(quán)給 go 用戶(hù)宛畦,否則 docker 命令無(wú)法正常工作
chown go /var/run/docker.sock
# 啟動(dòng) gocd-agent 程序
bash /docker-entrypoint.sh
構(gòu)建 docker 鏡像
docker build -f agent.dockerfile -t hezhong0711/gocd-agent-jdk8 .
啟動(dòng)容器
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
- 要先啟動(dòng) gocd-server发乔,再啟動(dòng) gocd-agent
-
GOCD_SERVER_NAMES
為 gocd-server 容器的NAMES
值,參考GoCD 整行記(一):定制 gocd-server
說(shuō)明
docker 命令集成的坑
- 要在 docker 容器中集成 docker 命令,需要將宿主機(jī)的
/var/run/docker.sock
文件掛載到 docker 中,參考啟動(dòng)容器
命令中的-v '/var/run/docker.sock:/var/run/docker.sock:rw'
參數(shù) - 由于 gocd-agent 啟動(dòng)后用戶(hù)會(huì)切換到
go
用戶(hù)廷区,所以需要修改/var/run/docker.sock
的權(quán)限給go
用戶(hù),參考exntrypoint.sh
腳本中的chown go /var/run/docker.sock
命令