工作流程:
开发人员在gitLab上打了一个tag
gitLab把tag事件推送到Jenkins
Jenkins 获取tag源码,编译,打包,构建镜像
Jenkins 复制jar包到远程服务器
Jenkins 执行远程脚本(停止老版本容器,删除老版本容器,build 镜像,run 新容器)
通知测试人员部署结果
环境要求:
git,jdk,maven,docker,jenkins
一、环境安装:
1.1先安装jdk,maven
https://blog.csdn.net/sopp_li/article/details/80446932
远程wget下载不到文件,可到官网下载最新的。再配置
1.2 安装git
https://www.cnblogs.com/gsliuruigang/p/7899803.html
1.3安装 docker
http://www.runoob.com/docker/centos-docker-install.html
1.4 安装jenkins
https://www.cnblogs.com/stulzq/p/9291237.html
docker 安装 jenkins
https://www.cnblogs.com/fuzongle/p/12834080.html
pom.xml
<build> <finalName>gpserver</finalName> <plugins> <!-- Srping Boot 打包工具 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <!-- 指定JDK编译版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
dockerfile
# 基于哪个镜像 FROM frolvlad/alpine-oraclejdk8:slim # 将本地文件夹挂载到当前容器 VOLUME /tmp # 声明需要暴露的端口 EXPOSE 15678 10111 # 拷贝文件到容器,也可以直接写成ADD xxxxx.jar /app.jar ADD gpserver.jar app.jar RUN sh -c 'touch /app.jar' ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV JAVA_OPTS="" # 配置容器启动后执行的命令 ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
二、 jenkins 配置
插件下载
所需要的插件:
Maven Integration plugin
docker-build-step
Docker plugin
Gitlab Hook Plugin
GitLab Plugin
jenkins 系统配置:
2.1Maven项目配置
默认配置即可
2.2 Gitlab 配置
Credentials 添加:
gitlab的账号、密码
gitlab 有权限的api token
可提前在凭证》系统里添加好
jenkins全局工具配置
2.3Maven 配置
选择安装的maven的目录settings.xml路径
2.4 Maven配置,新增一个,去掉自动安装,选择安装的目录
到止jenkins环境配置完成。
三、配置部署项目
在jenkin里新建任务,构建一个maven项目
3.1源码管理:
把git地址,填上,Credentials 如果之前未设置,添加一个
如果连接成功,不会报报错
3.2构建触发器
在gitlab的项目里》设置》导入所有仓库,webhooks配置,填上上边的url,secret token
配置成功下边会显示 200状态码
3.3 构建build
构建成功后,在jenkins workspace文件目录里可看到下载下来的代码,以及在target里生成的jar包
Post Steps执行发布,更新脚本
在远程操作之前,先要配置发布对象主机免密登录
https://blog.csdn.net/fuck487/article/details/79361197
具体脚本:
echo '================打包完成,开始复制================' cd /var/lib/jenkins/workspace/gpsserver scp Dockerfile-gps root@hadoop1:/data/public/gpsserver/ scp server-gps/target/gpserver.jar root@hadoop1:/data/public/gpsserver/ echo '================复制文件完成================' ssh root@hadoop1 << remotessh echo '================进入主机hadoop1 shell================' cd /data/public/gpsserver echo '================停止容器 gpsserver================' sudo docker stop gpsserver echo '================删除容器 gpsserver================' sudo docker rm gpsserver echo '================删除镜像 gpsserver:latest================' sudo docker rmi gpsserver:latest echo '================build 镜像 gpsserver:latest================' sudo docker build -t gpsserver:latest -f ./Dockerfile-gps . echo '================运行容器 gpsserver================' sudo docker run --name=gpsserver -e JAVA_OPTS=' -Dspring.profiles.active=prod ' --restart always -it -d -p 10111:10111 -p 15678:15678 -v /data/public/gpsserver/logs:/logs gpsserver:latest echo "finished!" exit ###退出远程机器 remotessh ###结尾哦 echo '================结束远程启动================'
至此 一个项目配置完成。
结语:
jenkins 只是一个工具,使用功能强大,有其他的使用方式:
1.生成docker镜像,上传到阿里云或自搭镜像服务器,远程到主机shell进行pull,更新容器等。
2.可配合docker swarm,搭建集群部署,只需改一下脚本即可。