超全git+tomcat+jenkins實現自動化構建部署教程

超全jenkins實現自動化構建部署

項目介紹:項目前後端的發佈,
前端是用maven構建的springboot普通項目
後端是用npm構建的vue項目

附言:
這個是我最新寫的。用於精簡化這篇文章。當然這篇文章其實比精簡化那篇說的內容更多更詳細
Jenkins構建項目簡易教程
https://blog.csdn.net/u011456337/article/details/103344140

願景

能夠實現自動化拉取最新代碼->自動構建->自動發佈的一個部署平臺工具,如果更好一點,希望能像上一家公司的發佈平臺(一個基於dockercomopose的發佈工具)。能夠自動升級發佈多個實例,支持灰度發佈,支持版本回退,支持手機頁面端點擊操作。

現目標:把maven的springboot項目和npm的vue項目自動化部署
優點:無需進去xshell執行腳本
缺點:折騰搭建一套jenkins,感覺不如直接在xshell執行腳本(對於項目人很少的情況)

最終效果:完成現目標,把maven和npm項目自動化部署
優點:完成了maven和npm項目自動化部署
缺點:移動端不支持,不能發佈多個實例和版本回退,不能灰度發佈。
建議:如果有時間或者項目要做的更好,那麼我肯定會去用攜程的apollo配置管理平臺。或者自己弄一套之前公司有的自動化部署多實例的灰度發佈項目。

方案簡述

後端 springboot項目
代碼:osgit私庫
構建:maven
用jenkins建立一個maven項目,配置git源碼地址,添加git的用戶名和密碼,配置git parammeter實現git分支切換選擇,構建後配置使用腳本,腳本里麪包含移動構建後的jar包到運行目錄,並且啓動jar包。

前端 vue項目
代碼:osgit項目
構建:npm
用jenkins建立一個自由風格的項目,配置git源碼地址,添加git的用戶名和密碼,配置git parammeter實現git分支切換選擇,構建時配置使用腳本,腳本包含包含構建npm項目的dist包和遷移dist包到工作目錄,使用nginx轉發地址指向dist工作目錄

開發環境依賴

已安裝的同學請自行選擇跳過

  1. java8
  2. tomcat
  3. nginx
  4. maven
  5. nodejs
  6. git

1、安裝jdk環境

https://blog.csdn.net/a_18397219871/article/details/79466392

2、安裝tomcat

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.39/bin/apache-tomcat-8.5.39.tar.gz
tar -zxvf apache-tomcat-8.5.39.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-8.5.39 /usr/local/tomcat/
#可選操作-修改tomcat端口8080並啓動測試能夠訪問

在這裏插入圖片描述

測試頁面是否啓動成功
如果失敗了
1、阿里雲沒有開放端口 △
2、端口衝突,修改爲其他端口8081或者其他
3、看啓動和停止的日誌,是否jdk配置有問題,是的話手動修改tomcat(在bin目錄下)catalina.sh文件
export JAVA_HOME=/usr/local/jdk1.8.0_151
export JRE_HOME=/usr/local/jdk1.8.0_151/jre

3、安裝nginx

https://www.cnblogs.com/kaid/p/7640723.htm
1、修改nginx.conf,修改端口和ip
2、若無法訪問
1、
ping 140.143.233.204
2、telnet 140.143.233.204 8010 看是否能通
3、先暫時關閉防火牆來定位問題
systemctl stop firewalld.service
4、關閉防火牆再重試telnet
5、仍然不行的話先去騰訊雲或者阿里雲控制檯【安全組】開啓端口對外
4、啓動nginx
方式一:進去sbin目錄
./nginx -t
方式二:指定nginx的配置文件
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
5、如果啓動不起來報錯
nginx: [emerg] bind() to 0.0.0.0:8010 failed (98: Address already in use)
#kill掉端口
fuser -k 8010/tcp # fuser命令不存在的話就安裝一下yum install psmisc

貼上我的配置文件

user root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  192.168.99.100;

        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        
       location /mv/ {
        root html;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
       }
       location ^~ /demo {
            root   /home/lottery;
            index  index.html index.htm;
        }
       location ^~ /ehr {
            alias    /home/ehr/ehr-web/dist;
            index  index.html index.htm;
        }


        location /video/ {    #指定視頻、音頻存放路徑
           root  /home/lottery/dist;
           autoindex on;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

4、安裝maven
https://blog.csdn.net/bigtree_3721/article/details/79045028

5、安裝nodejs

https://www.cnblogs.com/liuqi/p/6483317.html
這裏會有坑
建立軟連接有點類似配置環境變量或者理解爲安裝地址指向,
ln -s /usr/local/src/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/src/nodejs/bin/node /usr/local/bin/
但是!
如果這時候node -v 無效命令時
那麼建立全局無效,那麼就需要手動配置環境變量
需要去vim /etc.profile添加環境變量手動指向安裝目錄
export NODE_HOME=/usr/local/src/nodejs # Node所在路徑
export PATH=NODEHOME/bin:NODE_HOME/bin:PATH
然後刷新環境變量
source /etc/profile

6、安裝jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.164.1/jenkins.war
把war包放在tomcat目錄的webapp下,會自動解壓成jenkins,
重啓tomcat,然後看日誌
tail -f catalina.out
,接着按照jenkins的提示來
3、等待一些配置加載
4、配置好用戶名
5、再次重啓,過程中遇到加載太慢,建議再次重啓
http://192.168.99.100:8081/jenkins/

7、安裝git

選擇一個目錄,存放下載的git,例如我的是:/home/luosan/soft,大家可以根據需求到官網下載相應的版本(查看git最新版本: https://github.com/git/git/releases登陸)
wget https://github.com/git/git/archive/v2.15.1.zip
3、解壓git
下載之後是這樣的
$ ls v2.15.1
$ pwd
/home/
因爲下載的是一個zip,所以使用命令將其解壓到git目錄下:
#參數-d 後邊的git是解壓到的目錄
$ unzip v2.15.1.zip -d git
4、編譯安裝git
進入git目錄
$ cd git/git-2.15.1
$ pwd
將其安裝在“/usr/local/git”目錄下,命令如下:
make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install
5、配置Git
sudo vim /etc/profile #編輯profile文件
然後而已看到這個文件已經有很多配置了,只需要在最下邊添加git的路徑即可:
export PATH=/usr/local/git/bin:$PATH
將這段話放在最後邊,然後使用source命令應用修改:
source /etc/profile
6、檢驗Git是否安裝成功
git --version

jenkins配置

1、按照這個配置基本的和安裝插件,安裝了maven和git還有node插件之後才能在很多下拉選擇的功能項有,否則會發現下面教程的很多下拉選項自己沒有,
2、遇坑提醒 遇到沒有的情況就是少了jenkins插件,可以百度下或者直接在插件庫搜。按照下面這個教程配置好基本的git、maven、node、jdk
https://blog.csdn.net/mmingxiang/article/details/81978168

後端maven項目的構建配置

簡述:新建job->配置git和git的多分支選擇->配置構建後執行的腳本

1、創建JOB->構建maven項目,我的樣例如下,別人的你也可以大概參考下,
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
2、構建後執行裏面粘貼的shell腳本,我的如下

BUILD_ID=DONTKILLME

echo "構建完成"
echo "停止java進程"
ps -aux | grep java|grep demo-admin| awk '{print $2}' | while read pid
do
    echo "正在殺死進程,pid=$pid"
    kill -9 $pid
    echo "kill result: $?"
done
echo "停止完成,睡眠三秒"
sleep 3

echo "複製jar包到/home/ehr/ehr-admin/下"

rm -rf /home/ehr/ehr-admin/demo-admin.jar

cp /root/.jenkins/workspace/demo-admin/target/demo-admin.jar /home/ehr/ehr-admin/

echo "複製包完成"

cd /home/ehr/ehr-admin/
ls -lht

echo "項目啓動中"

nohup java -jar /home/ehr/ehr-admin/demo-admin.jar >/dev/null 2>&1 &

#輸出到目錄,不設置則指定目錄>/opt/workspace/spring.log 2>&1 &

# tail -f /home/ehr/logs/admin/spring.log

echo "******************done************************"




前端vue項目配置

簡述:新建job->配置git和git的多分支選擇->配置構建執行的腳本

1、創建JOB->構建自由風格項目,我的樣例如下,別人的你也可以大概參考下,
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2、構建後執行裏面粘貼的shell腳本,我的如下

rm -rf /home/ehr/ehr-web/dist/*
rm -rf /root/.jenkins/workspace/demo-web/dist/*
cd /root/.jenkins/workspace/demo-web

# 生產的地址需要改成測試環境的,打包之後纔是測試環境的地址
rm -rf /root/.jenkins/workspace/demo-web/static/config/index-prod.js
cp /home/ehr/index-qa.js /root/.jenkins/workspace/demo-web/static/config/index-prod.js

# npm install --ignore-scripts

#npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
cnpm install
npm run build
cd dist
cp -r /root/.jenkins/workspace/demo-web/dist/ /home/ehr/ehr-web/

# 修改了生產的地址,接着要改回去
rm -rf /root/.jenkins/workspace/demo-web/static/config/index-prod.js
cp /home/ehr/index-prod.js /root/.jenkins/workspace/demo-web/static/config/index-prod.js

echo "構建完成"

常見問題

1、npm構建報錯

安裝cnpm命令
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
項目用cnpm install
接着再npm run build

2、 jenkins下拉菜單找不到該選項,比如構建自由風格的maven項目,git parameter不存在,需要去插件中心搜索
https://www.cnblogs.com/zhanglianghhh/archive/2018/10/11/9770529.htm在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
3、jenkins連不上插件中心,因爲安裝插件代理設置的是https,需要改成http,
位置:系統管理—插件管理—高級—找到網頁最下面的url,把https改成http在這裏插入圖片描述
4、jenkins一直在啓動中頁面卡主。
重啓tomcat等等看,多重啓幾次。
5、端口無法訪問,看阿里雲端口是否開啓了,telnet ip +端口是否通,是否防火牆的原因,是否端口衝突,換成其他端口試試。
6、構建報錯。看具體的jenkins構建log,才能看是構建工具配置問題還是jenkins配置錯了或者其他。

腳本發佈方案

使用jenkins構建之前的方法,原始發佈方案簡述:
直接在xshell裏面執行腳本,然後需要定時構建則寫定時任務,大致如下

4 創建cron腳本
第一步:寫cron腳本文件,命名爲crontest.cron,添加 
0 6 * * * /home/luosan/shell/deleteMv.sh
第二步:添加定時任務。執行命令 crontab crontest.cron  ,搞定
第三步:”crontab -l” 查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本
簡要命令介紹
/sbin/service crond start //啓動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啓服務
/sbin/service crond reload //重新載入配置
問:linux crontab 添加計劃任務,但是怎麼刪除該條任務
答:使用crontab -e進入Crontab配置文件,直接刪除就行了。其實就是添加計劃任務的一個反向操作而已。

參考文獻

Jenkins構建項目簡易教程
https://blog.csdn.net/u011456337/article/details/103344140

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章