正文
在Docker中运行gocd
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
gocd是一个持续集成的工具,可视化效果非常好
运行gocd-server
1 |
docker run -d --name server |
我们就可以通过http://go-server-ip:8153来访问gocd-server的web了
运行gocd-agent
1 |
docker run -d --name gocd |
其中AGENT_AUTO_REGISTER_KEY是在gocd-server的配置中。
执行完之后,就可以在web中看到添加的agent。
安装插件
1
2
cd /path/to/godata/plugins/external
wget https://github.com/gocd-contrib/script-executor-task/releases/download/0.3/script-executor-0.3.0.jar
DOOD
1 |
cd /path/to/godata/plugins/external |
我们通常希望在agent中执行docker命令在宿主中建立镜像运行容器网上大家把这种技术称之为DOOD(docker outside of docker)。
docker命令只能在root权限下执行,但是gocd的脚本是在go用户下运行的所以会报错,解决办法就是想办法让脚本切换到root下运行脚本,具体办法如下:
创建su文件
su的文件内容如下
1 |
#%PAM-1.0 |
创建dockerfile制作dood-gocd镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM gocd/gocd-agent-centos-7:v18.1.0
RUN yum install -y yum-utils
device-mapper-persistent-data
lvm2
RUN yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
RUN yum install -y docker-ce
RUN yum -y install sudo
RUN echo 'go ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN gpasswd -a go wheel
COPY su /etc/pam.d/su
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
1 |
FROM gocd/gocd-agent-centos-7:v18.1.0 |
这里的root方案就是在脚本中调用su root切换到root账户,并且取消输入密码。
1 |
docker build -t gocd-agent-dood . docker run -d --name gocd |
上面命令里的挂载就是把宿主机的docker.sock挂载到容器中,这样我们就能在gocd-agent-dood的容器中运行dock命名在宿主机上创建镜像运行容器了。
script如下:
1 |
su - root <<EOF |