系统及软件版本:
- ubuntu 18 LTS
- jenkins 2.176
- docker 18.09.7
jenkins 配置及插件
Docker plugin
Docker build step
因为墙的原因,jenkins下载插件很慢需要更换国内站点,这里用的清华的jenkins站点。但在插件管理-高级中修改升级站点并不会生效,需要到jenkins配置文件中修改,解决方案如下:
1
2
3
4
5修改 /var/lib/jenkins/update/default.json 执行
:s/http:\/\/updates.jenkins-ci.org\/download\/plugins/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins\/plugins/g
重启即可
docker 配置
- 配置阿里云仓库(官方docker hub速度很慢)阿里云docker容器镜像服务
jenkins部署步骤
新建一个maven项目
配置源码管理,这里使用的github仓库,配置了webhook用于提交代码触发自动构建。
maven 构建配置
这里使用的 docker:build 是maven安装了 docker镜像生成的插件,也可以不安装,那样就需要自己用命令构建镜像
maven docker 插件为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>docker.image.prefix 自己配置 例如配置banksy project.artifactId 是test,则生成的镜像名为 banksy/test
构建镜像并推送到远程仓库
使用shell
shell 命令:
1
2
3
4
5echo '================开始推送镜像================'
sudo docker login -u yourusername -p yourpassword registry.cn-shanghai.aliyuncs.com
sudo docker tag banksy/test registry.cn-shanghai.aliyuncs.com/myimage:latest
sudo docker push registry.cn-shanghai.aliyuncs.com/myimage:latest
echo '================结束推送镜像================'此处使用shell 会遇到两个坑
无法使用sudo,因为jenkins是使用的jenkins用户来执行的shell,因而需要为jenkins配置sudo权限,使用root账户进入 /etc 目录执行
1
2
3
4
5
6
7
8cd /etc
visudo
# 添加如下内容
# Allow members of group sudo to execute any command
# 添加内容如下
jenkins ALL=(ALL) NOPASSWD: ALL
# ctrl+O 写入文件
docker login fails on a server with no X11 installed 执行
In a nutshell (from https://github.com/docker/compose/issues/6023)
1
2sudo apt install gnupg2 pass
gpg2 --full-generate-keyThis generates a you a gpg2 key. After that’s done you can list it with
1
gpg2 -k
Copy the key id (from the line labelled
[uid]
) and do1
pass init "whatever key id you have"
使用docker plugin插件
目标机器上pull仓库并执行
bash 命令:
1
2
3
4
5
6
7
8
echo '================开始拉取镜像================'
docker login -u yourusername -p yourpassword registry.cn-shanghai.aliyuncs.com
docker push registry.cn-shanghai.aliyuncs.com/myimage:latest
sudo docker run -d --name=banksy-test -p 8080:8081 --restart=always registry.cn-shanghai.aliyuncs.com/myimage:latest
echo '================结束远程启动================'
结束
以上还有优化空间,push完后删除镜像,目标机器先删除老的镜像再构建等。还有可以使用docker plugin的登陆,不然需要在shell使用明文密码,使用明文密码需要安装 gnupg2 pass 。