jenkins自動(dòng)構(gòu)建SpringCloud流程
jenkins依賴docker-compose自動(dòng)部署SpringCloud和vue項(xiàng)目
本機(jī)環(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是一個(gè)開源軟件項(xiàng)目,是基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個(gè)開放易用的軟件平臺(tái),使軟件項(xiàng)目可以進(jìn)行持續(xù)集成。
下載war包
下載地址:https://jenkins.io/download/,如圖所示:
這個(gè)war包在Windows和Linux是通用的,可以直接通過(guò) wget 命令下載,或下載后再傳到Linux上。
這里不建議使用docker部署,因?yàn)楸救酥笆窃赿ocker部署的,jenkins會(huì)以容器形式啟動(dòng),linux本機(jī)的jdk,nodejs,maven等都需掛載,jar包啟動(dòng)方式也會(huì)收到很大影響、如果依賴docker-compose啟動(dòng),很難進(jìn)行多個(gè)docker-compose組合使用。
war包部署
war包上傳到指令目錄之后(/home/jenkins/war/),首先保證系統(tǒng)中已經(jīng)安裝了jdk,最好是jdk1.5以上。
這里先不闡述,之后在同級(jí)目錄新建腳本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
- 啟動(dòng)命令
/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è)置開機(jī)自啟
給jenkins.sh文件授權(quán)
chmod +x /home/jenkins/war/jenkins.sh
在/etc/rc.d/rc.local文件底部,添加內(nèi)容:
/home/jenkins/war/jenkins.sh start
重啟計(jì)算機(jī)
reboot
訪問(wèn)Jenkins
訪問(wèn)Jenkins的地址:http://ip地址:8088(8088是上一步指定的端口)
第一次訪問(wèn),出現(xiàn)上面的界面,繼續(xù)等待,直到出現(xiàn)下面界面。
根據(jù)上面提示,到路徑 /root/.jenkins/secrets/initialAdminPassword 下找出密碼,然后復(fù)制填入即可。
[root@localhost ~]# cat /root/.jenkins/secrets/initialAdminPassword ef66fdc63ddb49035a55c7cfaf796578
啟動(dòng)時(shí)候,提示:該jenkins實(shí)例似乎已離線
- 修改/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對(duì)應(yīng)目錄下,修改default.json文件,依次執(zhí)行上述命令。
插件配置
1.安裝GitLab相關(guān)插件
2.NodeJS插件
3.Maven 插件
注意:插件下載失敗時(shí)重新執(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并寫上主機(jī)地址,點(diǎn)擊【add】來(lái)添加證書。
這里我們選擇添加 GitLab API token
登陸GitLab
點(diǎn)擊右上角頭像–>設(shè)置–>訪問(wèn)令牌
輸入令牌名稱,然后勾選api,點(diǎn)擊下方 創(chuàng)建個(gè)人訪問(wèn)令牌,復(fù)制token,并保存下來(lái)。因?yàn)橄麓尉筒豢梢娏恕H缓笤贘enkins中粘貼
創(chuàng)建任務(wù)
vue項(xiàng)目
登錄jenkins之后,單擊New Item,輸入任務(wù)名稱,點(diǎn)選“Freestyle project”,點(diǎn)擊確定。
general 丟棄舊的構(gòu)建選上,輸入保持最大記錄數(shù),節(jié)省空間。
Source Code Management配置如下
Build Triggers我們點(diǎn)選,當(dāng)GitLab提交觸發(fā)【Build when a change …】,點(diǎn)擊下面的【advanced…】
拉到下面創(chuàng)建一個(gè)token
創(chuàng)建完成后,進(jìn)入GitLab上對(duì)應(yīng)的前端項(xiàng)目,點(diǎn)擊【Settings】–>【W(wǎng)ebhooks(集成)】將上面Build when a change is pushed to GitLab. GitLab webhook URL: 后面跟項(xiàng)目鏈接與剛剛生成的token輸入,點(diǎn)擊【Add webhook】添加成功后,點(diǎn)選測(cè)試,Push events 如果彈出 200 說(shuō)明測(cè)試通過(guò)。
Build Environment
:前端項(xiàng)目點(diǎn)選Provide Node & npm bin/ folder to PATH,配置無(wú)需改變。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,是因?yàn)閖enkins默認(rèn)用root用戶登錄,執(zhí)行install命令時(shí)會(huì)自動(dòng)切到nobody用戶,會(huì)提示沒有權(quán)限。我們可以在服務(wù)器給jenkins創(chuàng)建專用用戶,或者加--unsafe-perm參數(shù)。
配置完之后,點(diǎn)擊保存,初次構(gòu)建選擇Build Now。然后可看Build History中出現(xiàn)新的構(gòu)建進(jìn)度,緊接著我們選中,可在Console Output中看到構(gòu)建信息。
springcloud項(xiàng)目
創(chuàng)建Spring Cloud 跟創(chuàng)建 Vue前端任務(wù)類似,只是構(gòu)建環(huán)境可以不選,然后更改構(gòu)建中的shell。我們項(xiàng)目采用docker-compose部署,具體如下:
docker部署,并部署公共項(xiàng)目
安裝docker環(huán)境
#安裝docker [root@localhost~]# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun #啟動(dòng)docker [root@localhost~]# service docker start #看docker版本信息 [root@localhost~]# docker version
docker命令自動(dòng)補(bǔ)全
#安裝補(bǔ)全工具 [root@localhost ~]# yum install -y bash-completion #安裝完后,關(guān)閉當(dāng)前命令窗口,重新打開,再輸入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
通過(guò)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默認(rèn)的端口號(hào)是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
啟動(dòng)SkyWalking,只需運(yùn)行【bin/startup.bat】或【bin/startup.sh】即可
訪問(wèn)SkyWalking,地址:http://localhost:8480
注意:測(cè)試時(shí)啟動(dòng),測(cè)試完成記得關(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鏡像,進(jìn)入項(xiàng)目的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 # 時(shí)區(qū)問(wèn)題 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,用來(lái)管理容器
#下載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
通過(guò)docker-compose命令,啟動(dòng)項(xiàng)目,如下所示:
#啟動(dòng)項(xiàng)目 進(jìn)入docker目錄執(zhí)行 [root@localhost docker]# docker-compose up -d #查看啟動(dòng)的容器 [root@localhost docker]# docker ps #查看啟動(dòng)的logs [root@localhost docker]# docker logs -f skywalking-oap #項(xiàng)目異常時(shí),關(guān)閉項(xiàng)目命令 [root@localhost docker]# docker-compose down
jenkins配置正式項(xiàng)目
創(chuàng)建目錄
[root@localhost docker]# cd /home/data [root@localhost docker]# mkdir allocation-protocol # 創(chuàng)建存放項(xiàng)目jar包目錄 [root@localhost docker]# mkdir project # 創(chuàng)建存放docker-compose.yml文件目錄 [root@localhost docker]# mkdir docker-compose
docker-compose.yml文件配置如下
一個(gè)git倉(cāng)庫(kù)下多個(gè)服務(wù)時(shí)services下直接配置就可以了,然后對(duì)應(yīng)在shell腳本中新增所需項(xiàng)目
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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于spring cloud多個(gè)消費(fèi)端重復(fù)定義feign client的問(wèn)題
這篇文章主要介紹了spring cloud多個(gè)消費(fèi)端重復(fù)定義feign client的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java開發(fā)工具Eclipse使用技巧全局搜索和更替
這篇文章主要介紹了Java開發(fā)工具Eclipse使用技巧全局搜索和更替,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01redis 使用lettuce 啟動(dòng)內(nèi)存泄漏錯(cuò)誤的解決方案
這篇文章主要介紹了redis 使用lettuce 啟動(dòng)內(nèi)存泄漏錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04spring,mybatis事務(wù)管理配置與@Transactional注解使用詳解
這篇文章主要介紹了spring,mybatis事務(wù)管理配置與@Transactional注解使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07深入了解Java數(shù)據(jù)結(jié)構(gòu)和算法之堆
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之堆 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01spring boot springMVC擴(kuò)展配置實(shí)現(xiàn)解析
這篇文章主要介紹了spring boot springMVC擴(kuò)展配置實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08spring 整合mybatis后用不上session緩存的原因分析
因?yàn)橐恢庇胹pring整合了mybatis,所以很少用到mybatis的session緩存。什么原因呢?下面小編給大家介紹spring 整合mybatis后用不上session緩存的原因分析,需要的朋友可以參考下2017-02-02springboot+maven快速構(gòu)建項(xiàng)目的示例代碼
本篇文章主要介紹了springboot+maven快速構(gòu)建項(xiàng)目的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08