工作流程:
開發人員在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/stulzq/p/8627360.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,搭建集群部署,只需改一下腳本即可。