jenkins自動構(gòu)建SpringCloud流程
jenkins依賴docker-compose自動部署SpringCloud和vue項目
本機環(huán)境
CentOS: CentOS Linux release 7.9.2009 (Core) jdk: Java(TM) SE Runtime Environment (build 1.8.0_281-b09) NodeJs: v14.15.4 npm: 6.14.10 maven: 3.6.3 git: 2.30.1
jenkins配置
Jenkins是一個開源軟件項目,是基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個開放易用的軟件平臺,使軟件項目可以進行持續(xù)集成。
下載war包
下載地址:https://jenkins.io/download/,如圖所示:
這個war包在Windows和Linux是通用的,可以直接通過 wget 命令下載,或下載后再傳到Linux上。
這里不建議使用docker部署,因為本人之前是在docker部署的,jenkins會以容器形式啟動,linux本機的jdk,nodejs,maven等都需掛載,jar包啟動方式也會收到很大影響、如果依賴docker-compose啟動,很難進行多個docker-compose組合使用。
war包部署
war包上傳到指令目錄之后(/home/jenkins/war/),首先保證系統(tǒng)中已經(jīng)安裝了jdk,最好是jdk1.5以上。
這里先不闡述,之后在同級目錄新建腳本jenkins.sh,內(nèi)容如下:
#! /bin/bash JAVA_OPTIONS="-server -Xmx2048m -Xms1024m" Jenkins=$2 this_dir="$( cd "$( dirname "$0" )" && pwd )" log_file="${this_dir}/catalina.out" jar_file="${this_dir}/${Jenkins}" if [ "$1" = "" ]; then echo -e "\033[0;31m 未輸入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m" exit 1 fi if [ "$Jenkins" = "" ]; then echo -e "\033[0;31m 未輸入應(yīng)用名 \033[0m" exit 1 fi function start() { count=`ps -ef |grep java|grep $Jenkins|grep -v grep|wc -l` if [ $count != 0 ];then echo "$Jenkins is running..." else nohup java $JAVA_OPTIONS -jar ${jar_file} --httpPort=8088 > "${log_file}" 2>&1 & echo -e "Start $Jenkins success...Please see the detail log in /logs/catalina.out" fi } function stop() { echo "Stop $Jenkins" boot_id=`ps -ef |grep java|grep $Jenkins|grep -v grep|awk '{print $2}'` count=`ps -ef |grep java|grep $Jenkins|grep -v grep|wc -l` if [ $count != 0 ];then kill $boot_id count=`ps -ef |grep java|grep $Jenkins|grep -v grep|wc -l` boot_id=`ps -ef |grep java|grep $Jenkins|grep -v grep|awk '{print $2}'` kill -9 $boot_id fi } function restart() { stop sleep 2 start } function status() { count=`ps -ef |grep java|grep $Jenkins|grep -v grep|wc -l` if [ $count != 0 ];then echo "$Jenkins is running..." else echo "$Jenkins is not running..." fi } case $1 in start) start;; stop) stop;; restart) restart;; status) status;; *) echo -e "\033[0;31m Usage: \033[0m \033[0;34m sh $0 {start|stop|restart|status} {JenkinsJarName} \033[0m\033[0;31m Example: \033[0m\033[0;33m sh $0 start jenkins.war \03[0m" esac
- 狀態(tài)查詢
/home/jenkins/war/jenkins.sh status jenkins.war
- 啟動命令
/home/jenkins/war/jenkins.sh start jenkins.war
- 停止命令
/home/jenkins/war/jenkins.sh stop jenkins.war
- 重啟命令
/home/jenkins/war/jenkins.sh restart jenkins.war
設(shè)置開機自啟
給jenkins.sh文件授權(quán)
chmod +x /home/jenkins/war/jenkins.sh
在/etc/rc.d/rc.local文件底部,添加內(nèi)容:
/home/jenkins/war/jenkins.sh start
重啟計算機
reboot
訪問Jenkins
訪問Jenkins的地址:http://ip地址:8088(8088是上一步指定的端口)
第一次訪問,出現(xiàn)上面的界面,繼續(xù)等待,直到出現(xiàn)下面界面。
根據(jù)上面提示,到路徑 /root/.jenkins/secrets/initialAdminPassword 下找出密碼,然后復(fù)制填入即可。
[root@localhost ~]# cat /root/.jenkins/secrets/initialAdminPassword ef66fdc63ddb49035a55c7cfaf796578
啟動時候,提示:該jenkins實例似乎已離線
- 修改/root/.jenkins/hudson.model.UpdateCenter.xml
- 把url改為https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
插件安裝失敗解決方法
[root@localhost updates]# cd /root/.jenkins/updates/ [root@localhost updates]# sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json [root@localhost updates]# sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json [root@localhost updates]#
到j(luò)enkins對應(yīng)目錄下,修改default.json文件,依次執(zhí)行上述命令。
插件配置
1.安裝GitLab相關(guān)插件
2.NodeJS插件
3.Maven 插件
注意:插件下載失敗時重新執(zhí)行【插件安裝失敗解決方法】中
sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json
命令。
全局工具配置
建議插件提前在服務(wù)器部署好。
配置GitLab
Manage Jenkins(系統(tǒng)管理)–>Configure System(系統(tǒng)設(shè)置),找到GitLab,填寫上名稱與GitLab并寫上主機地址,點擊【add】來添加證書。
這里我們選擇添加 GitLab API token
登陸GitLab
點擊右上角頭像–>設(shè)置–>訪問令牌
輸入令牌名稱,然后勾選api,點擊下方 創(chuàng)建個人訪問令牌,復(fù)制token,并保存下來。因為下次就不可見了。然后在Jenkins中粘貼
創(chuàng)建任務(wù)
vue項目
登錄jenkins之后,單擊New Item,輸入任務(wù)名稱,點選“Freestyle project”,點擊確定。
general 丟棄舊的構(gòu)建選上,輸入保持最大記錄數(shù),節(jié)省空間。
Source Code Management配置如下
Build Triggers我們點選,當GitLab提交觸發(fā)【Build when a change …】,點擊下面的【advanced…】
拉到下面創(chuàng)建一個token
創(chuàng)建完成后,進入GitLab上對應(yīng)的前端項目,點擊【Settings】–>【W(wǎng)ebhooks(集成)】將上面Build when a change is pushed to GitLab. GitLab webhook URL: 后面跟項目鏈接與剛剛生成的token輸入,點擊【Add webhook】添加成功后,點選測試,Push events 如果彈出 200 說明測試通過。
Build Environment
:前端項目點選Provide Node & npm bin/ folder to PATH,配置無需改變。Build
:構(gòu)建這里,我們選擇shell腳本。
配置如下:
npm -v npm install --unsafe-perm npm run build:prod tar -zcvf dist.tar.gz ./dist mv ./dist.tar.gz /home/nginx/html; cd /home/nginx/html; rm -rf ./dist tar -zxvf ./dist.tar.gz; rm -rf ./dist.tar.gz;
注意 npm install 后面加--unsafe-perm,是因為jenkins默認用root用戶登錄,執(zhí)行install命令時會自動切到nobody用戶,會提示沒有權(quán)限。我們可以在服務(wù)器給jenkins創(chuàng)建專用用戶,或者加--unsafe-perm參數(shù)。
配置完之后,點擊保存,初次構(gòu)建選擇Build Now。然后可看Build History中出現(xiàn)新的構(gòu)建進度,緊接著我們選中,可在Console Output中看到構(gòu)建信息。
springcloud項目
創(chuàng)建Spring Cloud 跟創(chuàng)建 Vue前端任務(wù)類似,只是構(gòu)建環(huán)境可以不選,然后更改構(gòu)建中的shell。我們項目采用docker-compose部署,具體如下:
docker部署,并部署公共項目
安裝docker環(huán)境
#安裝docker [root@localhost~]# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun #啟動docker [root@localhost~]# service docker start #看docker版本信息 [root@localhost~]# docker version
docker命令自動補全
#安裝補全工具 [root@localhost ~]# yum install -y bash-completion #安裝完后,關(guān)閉當前命令窗口,重新打開,再輸入docker 按2下tab鍵,則可出現(xiàn)所有docker命令 [root@localhost ~]# docker attach config create exec history import kill logout node port push rm save service stats system trust version build container diff export image info load logs pause ps rename rmi search stack stop tag unpause volume commit cp events help images inspect login network plugi n pull restart run secret start swarm top update wait [root@localhost ~]# docker e events exec export
通過Dockfile文件,構(gòu)建docker鏡像
搭建SkyWalking環(huán)境
下載地址:https://www.apache.org/dyn/closer.cgi/skywalking/6.6.0/apache-skywalking-apm-6.6.0.zip
webapp-ui默認的端口號是8080,修改成8480,以免造成端口沖突,修改文件:webapp/webapp.yml
server: port: 8480 collector: path: /graphql ribbon: ReadTimeout: 10000 # Point to all backend's restHost:restPort, split by , listOfServers: 127.0.0.1:12800
啟動SkyWalking,只需運行【bin/startup.bat】或【bin/startup.sh】即可
訪問SkyWalking,地址:http://localhost:8480
注意:測試時啟動,測試完成記得關(guān)掉,后續(xù)都由docker完成。
#將下載的SkyWalking6.6,解壓到docker目錄下,如下:
[root@localhost docker]# pwd /work/docker [root@localhost docker]# ll total 4 drwxr-xr-x. 8 root root 137 Dec 24 06:30 apache-skywalking-apm-bin -rw-r--r--. 1 root root 509 Feb 26 15:32 Dockerfile #構(gòu)建docker鏡像,進入項目的docker目錄,執(zhí)行如下命令即可 [root@localhost docker]# docker build -t spring_cloud_demo:1.0 . #查看Docker鏡像 [root@localhost docker]# docker images
Dockfile配置如下:
# 構(gòu)建鏡像,執(zhí)行命令:【docker build -t spring_cloud_demo:3.2 .】 FROM openjdk:8u212-jre MAINTAINER Jack # 時區(qū)問題 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone ADD apache-skywalking-apm-bin/agent/ /agent ENTRYPOINT ["java", "-server", "-Xms512M", "-Xmx512M", "-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=UTF-8", "-XX:+HeapDumpOnOutOfMemoryError", "-javaagent:/agent/skywalking-agent.jar", "-jar", "/app/app.jar" ]
安裝docker-compose,用來管理容器
#下載docker-compose [root@localhost ~]# curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-co mpose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 617 0 617 0 0 555 0 --:--:-- 0:00:01 --:--:-- 556 100 11.2M 100 11.2M 0 0 1661k 0 0:00:06 0:00:06 --:--:-- 2845k #增加可執(zhí)行權(quán)限 [root@localhost ~]# chmod +x /usr/local/bin/docker-compose #查看版本信息 [root@localhost ~]# docker-compose version docker-compose version 1.22.0, build f46880fe docker-py version: 3.4.1 CPython version: 3.6.6 OpenSSL version: OpenSSL 1.1.0f 25 May 2017
docker-compose官方文檔
https://docs.docker.com/compose/compose-file/compose-file-v2/
創(chuàng)建公用docker-compose.yml文件,主要是為了部署elasticsearch,skywalking-oap,skywalking-ui,可放到docker目錄下,具體為:
ersion: '3.3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0 container_name: elasticsearch restart: always ports: - 9200:9200 environment: - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 skywalking-oap: image: apache/skywalking-oap-server:6.6.0-es7 container_name: skywalking-oap depends_on: - elasticsearch links: - elasticsearch restart: always ports: - 11800:11800 - 12800:12800 environment: - SW_STORAGE=elasticsearch - SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 skywalking-ui: image: apache/skywalking-ui:6.6.0 container_name: skywalking-ui depends_on: - skywalking-oap links: - skywalking-oap restart: always ports: - 8480:8080 environment: - SW_OAP_ADDRESS=skywalking-oap:12800
通過docker-compose命令,啟動項目,如下所示:
#啟動項目 進入docker目錄執(zhí)行 [root@localhost docker]# docker-compose up -d #查看啟動的容器 [root@localhost docker]# docker ps #查看啟動的logs [root@localhost docker]# docker logs -f skywalking-oap #項目異常時,關(guān)閉項目命令 [root@localhost docker]# docker-compose down
jenkins配置正式項目
創(chuàng)建目錄
[root@localhost docker]# cd /home/data [root@localhost docker]# mkdir allocation-protocol # 創(chuàng)建存放項目jar包目錄 [root@localhost docker]# mkdir project # 創(chuàng)建存放docker-compose.yml文件目錄 [root@localhost docker]# mkdir docker-compose
docker-compose.yml文件配置如下
一個git倉庫下多個服務(wù)時services下直接配置就可以了,然后對應(yīng)在shell腳本中新增所需項目
version: '3.3' services: allocation-protocol: image: renren_io:3.2 container_name: allocation-protocol-server ports: - 10021:10021 networks: - skywalking-oap environment: - JAVA_OPTS=-DSW_AGENT_NAME=allocation-protocol -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking-oap:11800 env_file: - /home/docker/common.env volumes: - /home/data/allocation-protocol/project/allocation-server.jar:/app/app.jar networks: skywalking-oap: external: true
jenkins中shell腳本
# jdk版本 java -version # maven版本 mvn -version # clean install 清除之前的包,并將所有模塊 打包 mvn clean mvn install # 刪除所有舊包 cd /home/data/allocation-protocol rm -rf ./project; mkdir project; # allocation-protocol mv /root/.jenkins/workspace/allocation-protocol/allocation-server/target/allocation-server.jar /home/data/allocation-protocol/project cd /home/data/allocation-protocol/docker-compose/ # docker-compose docker-compose down docker-compose up -d
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于spring cloud多個消費端重復(fù)定義feign client的問題
這篇文章主要介紹了spring cloud多個消費端重復(fù)定義feign client的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java開發(fā)工具Eclipse使用技巧全局搜索和更替
這篇文章主要介紹了Java開發(fā)工具Eclipse使用技巧全局搜索和更替,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01redis 使用lettuce 啟動內(nèi)存泄漏錯誤的解決方案
這篇文章主要介紹了redis 使用lettuce 啟動內(nèi)存泄漏錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04spring,mybatis事務(wù)管理配置與@Transactional注解使用詳解
這篇文章主要介紹了spring,mybatis事務(wù)管理配置與@Transactional注解使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07深入了解Java數(shù)據(jù)結(jié)構(gòu)和算法之堆
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之堆 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01spring boot springMVC擴展配置實現(xiàn)解析
這篇文章主要介紹了spring boot springMVC擴展配置實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08spring 整合mybatis后用不上session緩存的原因分析
因為一直用spring整合了mybatis,所以很少用到mybatis的session緩存。什么原因呢?下面小編給大家介紹spring 整合mybatis后用不上session緩存的原因分析,需要的朋友可以參考下2017-02-02springboot+maven快速構(gòu)建項目的示例代碼
本篇文章主要介紹了springboot+maven快速構(gòu)建項目的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08