server1 172.25.63.1 gitlab主机,git
server2 172.25.63.2 jenkins+docker主机 git
server3 172.25.63.3 harbor仓库主机 docker
server4 172.25.63.4 docker主机
安装gitlab插件
首先需要在jenkins安装gitlab插件:
jenkins项目demo配置
gitlab配置
默认情况下gitlab不允许在本地调用,因此我们需要设置本地调用:
再针对项目进行设置,点击项目 --> demo —> webhook:、
需要更改docker.sock的权限(jenkins使用的是普通用户jenkins,因此需要添加权限):
[root@server2 ~]# chmod 777 /run/docker.sock
同时确保server2可以连接上server3部署的harbor仓库(证书,解析,daemon。json都需要做)。
可以先在server2拉取nginx节省以后的时间。
vim Dockerfile
FROM nginx
EXPOSE 80
COPY index.html /usr/share/nginx/html
git add Dockerfile
git commit -m "add dockerfile"
git push -u origin master
这个变更就会触发jenkins的更新:
可以看到构建成功:
添加构建后的动作。
接下来我们新建一个项目docker:
配置项目docker:
设置在demo构建稳定后执行触发:
其动作为使用刚刚创建的镜像构建一个容器
我们在上个实验中设置的Docker Host URI为本地主机 unix:///…,这里的主机指的是jenkins本地的docker引擎,接下来我们实现远程主机的docker调用:
首先准备虚拟机 server4(172.25.63.4),并安装docker,
开启docker后默认不会打开对外的接口,我们需要打开这个端口,打开时我们需要进行tls加密:
[root@server4 ~]# openssl genrsa -aes256 -out ca-key.pem 4096
Generating RSA private key, 4096 bit long modulus
.........................++
.............++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem: #这里输入密码
Verifying - Enter pass phrase for ca-key.pem:
[root@server4 ~]# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
Enter pass phrase for ca-key.pem: #输入刚才的密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:**
State or Province Name (full name) []:***
Locality Name (eg, city) [Default City]:**
Organization Name (eg, company) [Default Company Ltd]:**
Organizational Unit Name (eg, section) []:**
Common Name (eg, your name or your server's hostname) []:server4 #这里写上主机名。
Email Address []:[email protected]
[root@server4 ~]# openssl genrsa -out server-key.pem 4096
[root@server4 ~]# openssl req -subj "/CN=server4" -sha256 -new -key server-key.pem -out server.csr
[root@server4 ~]# openssl req -subj "/CN=server4" -sha256 -new -key server-key.pem -out server.csr
[root@server4 ~]# echo subjectAltName = DNS:server4,IP:172.25.63.4,IP:127.0.0.1 >> extfile.cnf
[root@server4 ~]# echo extendedKeyUsage = serverAuth >> extfile.cnf
[root@server4 ~]#
[root@server4 ~]# cat extfile.cnf
subjectAltName = DNS:server4,IP:172.25.63.4,IP:127.0.0.1
extendedKeyUsage = serverAuth
[root@server4 ~]#
[root@server4 ~]# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
Signature ok
subject=/CN=server4
Getting CA Private Key
Enter pass phrase for ca-key.pem: #输入刚才的密码
[root@server4 ~]# cp ca.pem server-cert.pem server-key.pem /etc/docker/
[root@server4 ~]# cp /usr/lib/systemd/system/docker.service /etc/systemd/system/
[root@server4 ~]# vim /etc/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376
[root@server4 ~]# systemctl daemon-reload
[root@server4 ~]# systemctl restart docker
[root@server4 ~]# netstat -antlp | grep 2376
tcp6 0 0 :::2376 :::* LISTEN 4032/dockerd
可以看到2376端口已经打开说明远程主机的docker已经可以使用。
接下来进行jenkins的配置。
对项目demo进行配置:
其中server credentials中添加的信息需要客户端的认证:
[root@server4 ~]# openssl genrsa -out key.pem 4096
[root@server4 ~]# openssl req -subj '/CN=client' -new -key key.pem -out client.csr
[root@server4 ~]# echo extendedKeyUsage = clientAuth >> extfile.cnf
[root@server4 ~]# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
Signature ok
subject=/CN=client
Getting CA Private Key
Enter pass phrase for ca-key.pem: #输入刚才的密码
此时就生成了客户端的证书(cert.pem)和key(key.pem)。
在网页端添加:
之后保存。使server4能够连接harbor仓库,需要做解析和复制证书。
root@server4 ~]# cd /etc/docker/certs.d/reg.westos.org/
[root@server4 reg.westos.org]# ls
ca.crt
[root@server4 docker]# vim /etc/hosts
[root@server4 docker]# cat /etc/hosts
172.25.63.3 server3 reg.westos.org
在docker重启后将/var/run/docker.sock
的权限设置为777
我们之前在docker项目中都是在docker主机的本地启动容器,现在我们尝试使用ssh的方式远程控制主机使用shell启动容器。
这里将server4设置为远程ssh主机,也可以再开启一个主机(需要安装配置docker)。