天天看點

DevOps-Jenkins 實作DevOps流水線代碼部署-參數化建構基礎

 建立job任務

DevOps-Jenkins 實作DevOps流水線代碼部署-參數化建構基礎

參數化建構

在執行建構時可根據參數選項執行

DevOps-Jenkins 實作DevOps流水線代碼部署-參數化建構基礎
DevOps-Jenkins 實作DevOps流水線代碼部署-參數化建構基礎
執行腳本并傳遞參數
DevOps-Jenkins 實作DevOps流水線代碼部署-參數化建構基礎
點選立即建構可以看到會有參數選擇,執行時根據自己需求建構
DevOps-Jenkins 實作DevOps流水線代碼部署-參數化建構基礎
下列是參考腳本

#!/bin/bash
DATE=`date +%Y-%m-%d_%H-%M-%S`
METHOD=$1
BRANCH=$2
GROUP_LIST=$3

function IP_list(){
  if [[ ${GROUP_LIST} == "GROUP1" ]];then
     Server_IP="192.168.0.142"
     echo ${Server_IP}
     #ssh [email protected] ""echo disable  server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock"
     #ssh [email protected] ""echo disable  server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock"
  elif [[ ${GROUP_LIST} == "GROUP2" ]];then
     Server_IP="192.168.0.79"
     echo ${Server_IP}
     #從排程器下線後端伺服器,如果排程器開啟了多程序,則需要從每一個程序都下線
     #ssh [email protected] ""echo enable  server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock"
     #ssh [email protected] ""echo enable  server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock"
  elif [[ ${GROUP_LIST} == "GROUP3" ]];then
     Server_IP="192.168.0.142 192.168.0.79"
     echo ${Server_IP}
  fi
}

function clone_code(){
  cd /data/git/linux39/ && rm -rf web1
  git clone -b ${BRANCH} [email protected]:linux39/web1.git
  echo "代碼clone完成"
}

#代碼品質掃描
#function scanner_code(){
#  cd /data/git/linux39/web1 && /usr/local/sonar-scanner/bin/sonar-scanner
#  echo "代碼掃描完成,請打開sonarqube檢視掃描結果"
#}

function code_maven(){
  echo  "cd /data/git/linux39/web1 && mvn clean package -Dmaven.test.skip=true"
  echo "代碼編譯完成"
}


function make_zip(){
  cd /data/git/linux39/web1   && zip -r code.zip ./
  echo "代碼打包完成"
}

#下線後端伺服器
#down_node(){
  #for node in ${Server_IP};do
    #jenkins到後端伺服器免密鑰登入
    #ssh [email protected] "echo "disable server  linux39-web-80-master/${node}" | socat stdio /run/haproxy/admin.sock"
    #echo "${node} 從負載均衡172.31.0.103下線成功"
    #ssh [email protected] "echo "disable server  linux39-web-80-master/${node}" | socat stdio /run/haproxy/admin.sock"
    #echo "${node} 從負載均衡172.31.0.104下線成功"
  #done
#}

function stop_tomcat(){
  for node in ${Server_IP};do
    ssh www@${node}   "/opt/apps/tomcat.sh stop"
  done
}

function scp_zipfile(){
  for node in ${Server_IP};do
    scp /data/git/linux39/web1/code.zip  www@${node}:/data/tomcat/tomcat_appdir/code-${DATE}.zip
    ssh www@${node} "unzip /data/tomcat/tomcat_appdir/code-${DATE}.zip  -d /data/tomcat/tomcat_webdir/code-${DATE} && rm -rf  /data/tomcat/tomcat_webapps/myapp && ln -sv  /data/tomcat/tomcat_webdir/code-${DATE} /data/tomcat/tomcat_webapps/myapp"
  done
}


function start_tomcat(){
  for node in ${Server_IP};do
    ssh www@${node}   "/etc/init.d/tomcat start"
    #sleep 5
  done
}

function web_test(){
  sleep 5
  for node in ${Server_IP};do
    NUM=`curl -s  -I -m 10 -o /dev/null  -w %{http_code}  http://${node}:8080/myapp/index.html`
    if [[ ${NUM} -eq 200 ]];then
       echo "${node} 測試通過,即将添加到負載"
       add_node ${node}
    else
       echo "${node} 測試失敗,請檢查該伺服器是否成功啟動tomcat"
    fi
  done
}

function add_node(){
   node=$1
    echo ${node},"----->"
    #if [[ ${GROUP_LIST} == "GROUP2" ]];then
    #  ssh [email protected] ""echo enable  server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock"
    #  ssh [email protected] ""echo enable  server linux39-web-80-master/172.31.0.105" | socat stdio /run/haproxy/admin.sock"     
    #fi
    ##########################################
    if [ ${node} == "172.31.0.105" ];then
       echo "172.31.0.105 部署完畢,請進行代碼測試!"
    else
      ssh [email protected] ""echo enable  server linux39-web-80-master/${node}" | socat stdio /run/haproxy/admin.sock"
      ssh [email protected] ""echo enable  server linux39-web-80-master/${node}" | socat stdio /run/haproxy/admin.sock"
    fi
}

function rollback_last_version(){
  for node in ${Server_IP};do
   echo $node
   NOW_VERSION=`ssh www@${node} ""/bin/ls -l  -rt /data/tomcat/tomcat_webapps/ | awk -F"->" '{print $2}'  | tail -n1""`
   NOW_VERSION=`basename ${NOW_VERSION}`
   echo $NOW_VERSION,"NOW_VERSION"
    NAME=`ssh  www@${node}  ""ls  -l  -rt  /data/tomcat/tomcat_webdir/ | grep -B 1 ${NOW_VERSION} | head -n1 | awk '{print $9}'""`
   echo $NAME,""NAME
   ssh www@${node} "rm -rf /data/tomcat/tomcat_webapps/myapp && ln -sv  /data/tomcat/tomcat_webdir/${NAME} /data/tomcat/tomcat_webapps/myapp"
  done 
}

function delete_history_version(){
  for node in ${Server_IP};do
    ssh www@${node} "rm -rf /data/tomcat/tomcat_appdir/*"
    NUM=`ssh www@${node}  ""/bin/ls -l -d   -rt /data/tomcat/tomcat_webdir/code-* | wc -l""`
    echo $NUM
      if [ ${NUM} -gt 10 ];then
         NAME=`ssh www@${node} ""/bin/ls -l -d   -rt /data/tomcat/tomcat_webdir/code-* | head -n1 | awk '{print $9}'""`
         ssh www@${node} "rm -rf ${NAME}"
        echo "${node} 删除曆史版本 /data/tomcat/tomcat_webdir/${NAME}成功!"
      fi
  done 
}

main(){
   case $1  in
      deploy)
        IP_list;        
        clone_code;
        #scanner_code;
        make_zip;
        #down_node;
        stop_tomcat;
        scp_zipfile;
        start_tomcat;
        web_test;
        delete_history_version;
         ;;
      rollback_last_version)
        IP_list;
        #echo ${Server_IP}
        down_node;
        stop_tomcat;
        rollback_last_version;
        start_tomcat;
        web_test;
         ;;
    esac
}

main $1 $2 $3      

版本復原方式

1. 基于git reset

    重新執行代碼編譯,代碼編譯時間比較長

2. 重新更新

  開發修複完bug重新送出代碼,也是需要重新執行代碼編譯,代碼編譯時間比較長

3. 基于備份代碼目錄恢複

  基于已經存在的曆史版本目錄

    1. 目前所處的版本

     v1->v2(更新失敗)->v3(又失敗)

     如何復原到穩定的v1版本

     v3->v2->v1

    2. 将web伺服器的代碼目錄/webapps/myapp 軟連接配接到穩定版本

    3. 重新開機服務

越學越感到自己的無知