7. 创建任务
这里可以创建自由风格的任务或者Maven任务都可以
源码管理选择Git
打开Gitlab中的测试springboot项目复制项目地址
添加授权
这里采用用户名+密码验证的方式即可
8. 构建触发器
选择当代码提交时自动构建,点击Generate 生成,获得Jenkins的Token
复制url然后打开Gitlab
复制URL和Token 到这个地方点击Add Webhook
9. 构建任务拉取代码
点击立即构建即可 拉取Gitlab上的代码到本地
前两次失败是由于Git的路径配置错误,于是用
whereis git
重新查询了下路径,重新配置全局工具
然后测试 我的Gitlab提交是否回同步代码到Jenkins
点击Test push
Jenkins自动进行了第4次构建
至此,GitLab到Jenkins已经全部打通了,接下来看Jenkins的代码如何部署。
10. Maven构建项目
点击任务详情页面的Configure
在Build中选择调用顶层Maven构建项目
添加Maven打包命令
clean install -Dmaven.test.skip=true
11. Docker脚本部署
然后添加shell脚本
# 先删除之前的容器 echo "remobe old container" cid=$(docker ps -a | grep dockerspringboot | awk '{print $1}'| xargs) if [ $cid ] then echo "aaaaaaaaaaaa" echo "ccccccccc" docker rm -f $cid # 删除之前的镜像 echo "romove old image" docker rmi dockerspringboot else echo "no container now" fi # 构建镜像 mvn docker:build # 打印当前镜像 echo "current docker images" docker images | grep dockerspringboot # 启动容器 echo "start container" docker run -p 8010:8010 -d --name myspringboot dockerspringboot # 打印当前容器 echo "current container" docker ps -a | grep dockerspringboot echo "star service success!"
4) 测试
在GitLab中使用push event,然后在Jenkins中可以看到项目自动进入构建状态
查看Jenkins控制台输出
打开浏览器访问我们的网址
大功告成!
总结
1) GitLab单独Docker化
关于这套部署环境的改良,可以把GitLab安装放在单独的docker容器中,减少主服务器占用资源。
2) 远程推送私库
如果需要做到部署环境与线上环境分离,可以在pom文件中配置docker私库。同时还需要添加两台主机的sshkey。
需要先新增Maven属性
172.0.0.1:50000
然后把${docker.registry}属性作为imageName的前缀
docker.registry/{docker.registry}/{project.groupId}/project.artifactId:{project.artifactId}:{project.version}
最后执行mvn docker:build docker:push
3)Docker-Maven插件详解
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <!--imageName 用于指定Docker镜像的完整名称 groupoId为仓库名 artifactId为镜像名 version为标签名--> <imageName>${project.groupId}/${project.artifactId}:${project.version}</imageName> <!-- 用与指定Dockerfile文件所在的位置,project.build.outputDirectory 为了读取经过Maven资源过滤后的Dockerfile文件--> <dockerDirectory>${project.build.outputDirectory}</dockerDirectory> <resources> <resource> <!--指定需要复制的根目录--> <directory>${project.build.directory}</directory> <!--用于指定需要复制的文件--> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
4) 在Jenkins容器中运行Docker命令
在Jenkins中运行docker命令有4中方式
不使用任何Jenkins镜像,直接在宿主机上安装Jenkins、Docker。本文采用的就是此种方式。
不适用官方提供的Jenkins镜像,自己构造一个带有Docker服务的Jenkins镜像。
使用Docker-in-Docker(DinD)方案在Docker容器中运行其他Docker容器。这两个Docker容器是父子关系。DockerHub中i给你提供了Jenkins的DinD镜像。
使用Docker-outside-of-Docker(DooD)方案,在Docker容器中创建宿主机上的Docker容器,这两个容器是兄弟关系。DockerHub中提过了Jenkins的DooD镜像。