一.環境:
[root@bimvm01 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@bimvm01 ~]# uname -a Linux bimvm01 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux Jenkins 版本 jenkins-2.118-1.1 Jdk版本1.8.0 java-1.8.0-openjdk.x86_64
二.安裝
1.安裝epel源
rpm -ivh https://mirrors.kernel.org/fedora-epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
2.安裝jenkins
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key yum install jenkins -y
3.安裝jdk
yum install java-1.8.0-openjdk.x86_64 -y
4.安裝svn 客戶端
yum install -y subversion
查看svn命令幫助:
svn help
5.啟動jenkins
/etc/init.d/jenkins restart
或
java -jar /usr/lib/jenkins/jenkins.war
檢查進程是否存在,端口是否開啟,不想用8080的,也可以自己換個端口

6.關閉防火牆
或者配置開放端口(我懶得配置直接關閉了)
systemctl stop firewalld.service systemctl disable firewalld.service or(開放端口) firewall-cmd --permanent --add-port=8080/tcp
7.測試jenkins
然后在瀏覽器上輸入
http://192.168.1.170:8080
8.輸入密碼
[root@bimvm01 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword b6a6666602f34ab4866f9cdf7e5082d9

9.安裝插件
我是新手我選擇了第一個(安裝推薦的插件)

大概需要3-5分鍾

10.創建用戶
(你可以繼續使用admin也可以創建新的用戶)

11.jenkins 安裝完成

12.安裝maven
后邊打包后端需要
mkdir /home/maven cd /home/maven #上傳maven包 tar -xvf apache-maven-3.6.0-bin.tar.gz mv apache-maven-3.6.0 maven vim /etc/profile ##增加以下內容 export MAVEN_HOME=/home/maven/maven export MAVEN_HOME export PATH=${PATH}:${MAVEN_HOME}/bin ##重新刷新配置文件 source /etc/profile ##測試安裝 [root@bimvm01 maven]# mvn -version Apache Maven 3.0.5 (Red Hat 3.0.5-17) Maven home: /usr/share/maven Java version: 1.8.0_201, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
13.在jenkins中配置jdk和maven
系統管理--全局配置

14.插件管理中下載Publish over SSH插件
系統管理--系統設置

15創建一個新項目

16.配置該任務
源碼管理svn配置


17.構建觸發器

18.構建執行shell

#!/bin/bash ########################## ## 建威CMS ########################## now_time=$(date +"%Y%m%d_%H%M%S") cd /home/bim/cms tar -zcvf cms_back_${now_time}.tar.gz * mv cms_back_* /home/bim/back/cmsback systemctl reload nginx
注:1
如果有需要打包的項目的話執行的shell
要先下載npm
yum install npm -y #!/bin/bash -lie #sh /home/bim/back/jianweioa.sh #!/bin/bash ########################## ## 建威OA ########################## now_time=$(date +"%Y%m%d_%H%M%S") cd /home/bim/jianweioa #切換至構建目錄 node -v npm -v #檢查編譯環 cp -r /home/bim/back/jianweioaback/index.js /home/bim/jianweioa/config/ cp -r /home/node_modules /home/bim/jianweioa/ rm -rf /home/bim/jianweioa/src/api/service.js cp /home/bim/back/jianweioaback/api/service.js /home/bim/jianweioa/src/api #npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver #npm install #npm install wangeditor #npm install webpack #npm i #npm install http-server -g npm run build #編譯項目 cd dist tar -zcvf jwoa_${now_time}.tar.gz * #打包備份 mv jwoa_* /home/bim/back/jianweioaback rm -rf /home/bim/web/jianweioa/* mv /home/bim/jianweioa/dist/* /home/bim/web/jianweioa rm -rf /home/bim/jianweioa/* systemctl restart nginx
注:2
遇到的坑
剛開始構建打包的時候npm 一直報錯

后來查了資料發現開發這個魔鬼沒有吧包上傳完整config 文件里邊缺少index.js文件導致的
這邊打包會遇到很多問題 多跟開發交流
遇到的坑
再后來執行shell 發現報錯起不來nginx 是因為nginx 1024內的端口只能root 啟動
解決的辦法是用root 用戶啟動Jenks
1.修改Jenkins配置文件
# 打開配置文件 vim /etc/sysconfig/jenkins # 修改$JENKINS_USER,並去掉當前行注釋 $JENKINS_USER="root"
2.修改Jenkins相關文件夾用戶權限
chown -R root:root /var/lib/jenkins chown -R root:root /var/cache/jenkins chown -R root:root /var/log/jenkins
3.重啟Jenkins服務並檢查運行Jenkins的用戶是否已經切換為root
# 重啟Jenkins(若是其他方式安裝的jenkins則重啟方式略不同) systemctl restart jenkins # 查看Jenkins進程所屬用戶 ps -ef | grep jenkins # 若顯示為root用戶,則表示修改完成 #!/bin/bash ########################## ## 建威OA ## ########################## now_time=$(date +"%Y%m%d_%H%M%S") cp /home/bim/back/jianweioaback/index.js /home/bim/jianweioa/config/ cd /home/bim/jianweioa #切換至構建目錄 node -v npm -v #檢查編譯環 npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver npm install npm install wangeditor npm install webpack npm i npm run build #編譯項目 cd dist tar -zcvf jwoa_${now_time}.tar.gz * #打包備份 mv jwoa_* /home/bim/back/jianweioaback #rm -rf /home/bim/web/jianweioa/* mv /home/bim/jianweioa/dist/* /home/bim/web/jianweioa ls /home/bim/jianweioa | grep -v node_modules | xargs -i rm -rf {} systemctl restart nginx
以上為前端web 發布
點擊構建輸入

由用戶 xuewenlong 啟動 Running as SYSTEM 構建中 在工作空間 /home/bim/jianweioa 中 Updating https://192.168.1.200/svn/TestSVN/web/jianweioa at revision '2019-04-30T10:03:53.357 +0800' --quiet Using sole credentials yulinjie/****** (svn) in realm ‘<https://192.168.1.200:443> VisualSVN Server’ At revision 1312 Using sole credentials yulinjie/****** (svn) in realm ‘<https://192.168.1.200:443> VisualSVN Server’ [jianweioa] $ /bin/bash -lie /tmp/jenkins7296205467554102448.sh bash: 此 shell 中無任務控制 v10.15.3 6.4.1 > jianweioa@1.0.0 build /home/bim/jianweioa > node build/build.js Hash: [1m178a8e8725ee622ab067[39m[22m Version: webpack [1m3.12.0[39m[22m Time: [1m72413[39m[22mms [1mAsset[39m[22m [1mSize[39m[22m [1mChunks[39m[22m [1m[39m[22m [1m[39m[22m [1mChunk Names[39m[22m [1m[32mstatic/imgs/.svn/prop-base/background.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/img/asidebg.c3cf0b7.png[39m[22m 48 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/fonts/OAIcons.964a65d.woff[39m[22m 17.4 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/fonts/OAIcons.32db094.eot[39m[22m 17.5 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/fonts/OAIcons.93901bf.ttf[39m[22m 17.3 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/img/OAIcons.7c830dd.svg[39m[22m 61.9 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/fonts/element-icons.6f0a763.ttf[39m[22m 11 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/img/homelogo.3ba8e09.png[39m[22m 12.1 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[33mstatic/js/vendor.71c0e42d72cbb3a0195a.js[39m[22m [1m[33m826 kB[39m[22m [1m0[39m[22m [1m[32m[emitted][39m[22m [1m[33m[big][39m[22m vendor [1m[33mstatic/js/app.cdb168323639ec8ea899.js[39m[22m [1m[33m358 kB[39m[22m [1m1[39m[22m [1m[32m[emitted][39m[22m [1m[33m[big][39m[22m app [1m[32mstatic/js/manifest.2ae2e69a05c33dfc65f8.js[39m[22m 857 bytes [1m2[39m[22m [1m[32m[emitted][39m[22m manifest [1m[33mstatic/css/app.7892718fc7fe44c4f918da18a9c22625.css[39m[22m [1m[33m291 kB[39m[22m [1m1[39m[22m [1m[32m[emitted][39m[22m [1m[33m[big][39m[22m app [1m[32mstatic/css/app.7892718fc7fe44c4f918da18a9c22625.css.map[39m[22m 456 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/js/vendor.71c0e42d72cbb3a0195a.js.map[39m[22m 3.25 MB [1m0[39m[22m [1m[32m[emitted][39m[22m vendor [1m[32mstatic/js/app.cdb168323639ec8ea899.js.map[39m[22m 1.31 MB [1m1[39m[22m [1m[32m[emitted][39m[22m app [1m[32mstatic/js/manifest.2ae2e69a05c33dfc65f8.js.map[39m[22m 4.97 kB [1m2[39m[22m [1m[32m[emitted][39m[22m manifest [1m[32mindex.html[39m[22m 574 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/asidebg.png[39m[22m 48 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/asidelogo.png[39m[22m 4.57 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/background.png[39m[22m 203 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/homelogo.png[39m[22m 12.1 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/logo.png[39m[22m 4.44 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/.svn/all-wcprops[39m[22m 306 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/.svn/entries[39m[22m 517 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/.svn/format[39m[22m 2 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/.svn/prop-base/favicon.ico.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/all-wcprops[39m[22m 1.62 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/entries[39m[22m 2.02 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/format[39m[22m 2 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/asidebg.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/asidelogo.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/avatar.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/img/background.de3cb54.png[39m[22m 203 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/homelogo.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/logo.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/mail.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/newapply.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/newimgs.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/phone.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/share_qq.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/share_weixin.png.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/prop-base/testimg.jpeg.svn-base[39m[22m 131 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/asidelogo.png.svn-base[39m[22m 4.57 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/avatar.png.svn-base[39m[22m 2.71 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/logo.png.svn-base[39m[22m 4.44 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/mail.png.svn-base[39m[22m 356 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/newapply.png.svn-base[39m[22m 5.67 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/phone.png.svn-base[39m[22m 387 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/share_qq.png.svn-base[39m[22m 591 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/share_weixin.png.svn-base[39m[22m 605 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/avatar.png[39m[22m 2.71 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/mail.png[39m[22m 356 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/newapply.png[39m[22m 5.67 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/phone.png[39m[22m 387 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/share_qq.png[39m[22m 591 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/share_weixin.png[39m[22m 605 bytes [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/homelogo.png.svn-base[39m[22m 12.1 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/.svn/text-base/favicon.ico.svn-base[39m[22m 17 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/favicon.ico[39m[22m 17 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/testimg.jpeg.svn-base[39m[22m 37.2 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/testimg.jpeg[39m[22m 37.2 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/asidebg.png.svn-base[39m[22m 48 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/newimgs.png.svn-base[39m[22m 68.6 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/newimgs.png[39m[22m 68.6 kB [1m[39m[22m [1m[32m[emitted][39m[22m [1m[32mstatic/imgs/.svn/text-base/background.png.svn-base[39m[22m 203 kB [1m[39m[22m [1m[32m[emitted][39m[22m Build complete. Tip: built files are meant to be served over an HTTP server. Opening index.html over file:// won't work. index.html static/ static/imgs/ static/imgs/.svn/ static/imgs/.svn/prop-base/ static/imgs/.svn/prop-base/asidebg.png.svn-base static/imgs/.svn/prop-base/asidelogo.png.svn-base static/imgs/.svn/prop-base/avatar.png.svn-base static/imgs/.svn/prop-base/background.png.svn-base static/imgs/.svn/prop-base/homelogo.png.svn-base static/imgs/.svn/prop-base/logo.png.svn-base static/imgs/.svn/prop-base/mail.png.svn-base static/imgs/.svn/prop-base/newapply.png.svn-base static/imgs/.svn/prop-base/newimgs.png.svn-base static/imgs/.svn/prop-base/phone.png.svn-base static/imgs/.svn/prop-base/share_qq.png.svn-base static/imgs/.svn/prop-base/share_weixin.png.svn-base static/imgs/.svn/prop-base/testimg.jpeg.svn-base static/imgs/.svn/text-base/ static/imgs/.svn/text-base/asidelogo.png.svn-base static/imgs/.svn/text-base/avatar.png.svn-base static/imgs/.svn/text-base/logo.png.svn-base static/imgs/.svn/text-base/mail.png.svn-base static/imgs/.svn/text-base/newapply.png.svn-base static/imgs/.svn/text-base/phone.png.svn-base static/imgs/.svn/text-base/share_qq.png.svn-base static/imgs/.svn/text-base/share_weixin.png.svn-base static/imgs/.svn/text-base/homelogo.png.svn-base static/imgs/.svn/text-base/testimg.jpeg.svn-base static/imgs/.svn/text-base/asidebg.png.svn-base static/imgs/.svn/text-base/newimgs.png.svn-base static/imgs/.svn/text-base/background.png.svn-base static/imgs/.svn/all-wcprops static/imgs/.svn/entries static/imgs/.svn/format static/imgs/testimg.jpeg static/imgs/newimgs.png static/imgs/asidebg.png static/imgs/asidelogo.png static/imgs/background.png static/imgs/homelogo.png static/imgs/logo.png static/imgs/avatar.png static/imgs/mail.png static/imgs/newapply.png static/imgs/phone.png static/imgs/share_qq.png static/imgs/share_weixin.png static/.svn/ static/.svn/prop-base/ static/.svn/prop-base/favicon.ico.svn-base static/.svn/text-base/ static/.svn/text-base/favicon.ico.svn-base static/.svn/all-wcprops static/.svn/entries static/.svn/format static/favicon.ico static/img/ static/img/asidebg.c3cf0b7.png static/img/background.de3cb54.png static/img/OAIcons.7c830dd.svg static/img/homelogo.3ba8e09.png static/fonts/ static/fonts/OAIcons.964a65d.woff static/fonts/OAIcons.32db094.eot static/fonts/OAIcons.93901bf.ttf static/fonts/element-icons.6f0a763.ttf static/js/ static/js/vendor.71c0e42d72cbb3a0195a.js static/js/app.cdb168323639ec8ea899.js static/js/manifest.2ae2e69a05c33dfc65f8.js static/js/vendor.71c0e42d72cbb3a0195a.js.map static/js/app.cdb168323639ec8ea899.js.map static/js/manifest.2ae2e69a05c33dfc65f8.js.map static/css/ static/css/app.7892718fc7fe44c4f918da18a9c22625.css static/css/app.7892718fc7fe44c4f918da18a9c22625.css.map Finished: SUCCESS
后台war包自動打包發布
安裝插件
jdk tomcat Maven
安裝插件maven 插件

安裝Deploy to container Plugin插件

jenkins 配置


新建maven項目





腳本只能關閉tomcat 不能啟動tomcat
還沒能處理
#!/bin/bash -lie #!/bim/bash now_time=$(date +"%Y%m%d_%H%M%S") rm -rf /home/tomcat/apache-tomcat-9.0.10/webapps/oa-0.0.1-SNAPSHOT* cp /var/lib/jenkins/workspace/jwoawar/target/oa-0.0.1-SNAPSHOT.war /home/tomcat/apache-tomcat-9.0.102/webapps/ cp /var/lib/jenkins/workspace/jwoawar/target/oa-0.0.1-SNAPSHOT.war /home/bim/data/jianweioa/oa-0.0.1-SNAPSHOT-${now_time}.war #rm -rf /var/lib/jenkins/workspace/jwoawarwar/* ##!/bin/bash -lie #sh +x /home/tomcat/apache-tomcat-9.0.10/bin/shutdown.sh ##!/bin/bash -lie #sh +x /home/tomcat/apache-tomcat-9.0.10/bin/startup.sh
tomcat監控自啟腳本
#!/bin/sh # 獲取tomcat進程ID(其中[grep -w 'tomcat']代碼中的tomcat需要替換為你的tomcat文件夾名) TomcatID=$(ps -C java u --cols=500|grep /home/tomcat | awk '{print $2}') # tomcat啟動程序(這里注意tomcat實際安裝的路徑) StartTomcat=/home/tomcat/apache-tomcat-9.0.10/bin/startup.sh TomcatCache=/home/apache-tomcat-9.0.10/work #定義要監控的頁面地址 WebUrl=http://localhost:8080 #日志輸出 GetPageInfo=/tmp/TomcatMonitor.Info TomcatMonitorLog=/tmp/TomcatMonitor.log Monitor() { echo "[info]開始監控tomcat...[$(date +'%F %H:%M:%S')]" if [ $TomcatID ];then #這里判斷Tomcat進程是否存在 echo "[info]當前tomcat進程ID為:$TomcatID,繼續檢測頁面..." # 檢測是否啟動成功(成功的話頁面會返回狀態"200") TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code}) if [ $TomcatServiceCode -eq 200 ];then echo "[info]頁面返回碼為$TomcatServiceCode,tomcat啟動成功,測試頁面正常" else echo "[error]tomcat頁面出錯,請注意...狀態碼為$TomcatServiceCode,錯誤日志已輸出到$GetPageInfo" echo "[error]頁面訪問出錯,開始重啟tomcat" kill -9 $TomcatID # 殺掉原tomcat進程 sleep 3 rm -rf $TomcatCache # 清理tomcat緩存 $StartTomcat fi else echo "[error]tomcat進程不存在!tomcat開始自動重啟..." echo "[info]$StartTomcat,請稍候..." rm -rf $TomcatCache $StartTomcat fi echo "--------------------------" } Monitor>>$TomcatMonitorLog
中間有一些坑 需要自己去學習處理下
git 的話應該也差不多 沒用git 也沒測試