生產項目容器化改造(三)使用Jenkins任務部署非Maven項目

部署非Maven項目的Jenkins模版任務,複製模版部署測試:

  • 創建第二個模版:deploy-template-v2,保留兩個歷史構建,pipeline類型
#!groovy
pipeline{
  agent any
  environment{
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
    GitLab="gitlab"
    GitLabCredentialsId="gitlabcredentialsid"
    GitNS="gitns"
    GitName="gitname"
    GitSubPro="gitsubpro"
    GitSubProPort="gitsubproport"
    IPs="ips"
    Nginx="nginx"
    Harbor="harbor"
    LbNginx="lbnginx"
    LbNginxConf='lbnginxconf'
  }
  parameters{
    choice(
      name: 'Option',
      choices: 'Update\nRepublish\nRollback',
      description: '功能選擇,升級發佈、項目再發布,回滾發佈'
    )
    choice(
      name: 'Range',
      choices: 'Canary\nExcept\nALL\nips',
      description: '發佈範圍:單機發布,剩餘主機發布,全量發佈,單機發布'
    )
    choice(
      name: 'Interval',
      choices: '15\n30\n60\n120',
      description: '多機發布時的發佈間隔,單位秒'
    )
  }
  stages{
    stage("ImageBuild"){
      when { environment name: "Option", value: "Update"}
      steps{
        // 項目包上傳包共享服務器,構建鏡像並存入harbor鏡像共享服務器
        sh "bash ${JENKINS_HOME}/script/warMoveAndClearV2.sh ${WORKSPACE} ${GitSubPro} ${Nginx} ${Harbor}"
      }
    }
    stage("PublishProject"){
      steps{
        sh "bash ${JENKINS_HOME}/script/mutiPublish.sh ${Option} ${env.Range} '${IPs}' ${Interval} ${GitSubPro} ${GitSubProPort} ${Harbor} ${LbNginx} ${LbNginxConf}"
        
      }
    }
  }
}
  • 創建一個新的鏡像構建腳本
su - deploy
mkdir -pv /var/lib/jenkins/script && cd /var/lib/jenkins/script
vi warMoveAndClearV2.sh
#!/bin/bash
source ~/.bash_profile
warPath=${1}
warProName=${2}
imageName=$(echo ${warProName}| tr '[A-Z]' '[a-z]')
Release=$(date +%Y%m%d.%H%M%S)
WarFile=${warProName}-${Release}.war
nginxRootPath=/usr/share/nginx/html
Nginx=${3}
Harbor=${4}
# 創建nginx相應目錄並存儲當前構建的war包
mkdir -p ${nginxRootPath}/${warProName} && cd ${nginxRootPath}/${warProName}
mv -v ROOT.zip ${WarFile}
# 對歷史war包進行清理,保留3個war包
WarFileNumber=$(ls ${nginxRootPath}/${warProName}/*.war|wc -l)
if [ "${WarFileNumber}" -ge 3 ]
then
  StandFile=$(ls -t ${nginxRootPath}/${warProName}/*.war|head -3|tail -1)
  find ${nginxRootPath}/${warProName}/ -type f -name "*.war" -not -newer ${StandFile} -exec rm -f {} \;
fi
echo "[+] ############## $(date +%F_%T) 項目包${WarFile}存儲到nginx完成"
# 操縱harbor,構建鏡像並上傳
ssh root@${Harbor} "rm -rf /opt/${warProName} && mkdir -p /opt/${warProName}"
cat >/tmp/Dockerfile-${warProName}-${Release}<<EOF
FROM harbor.vincent.com/library/tomcat8-j8
WORKDIR /web/project
RUN rm -rf *
COPY ${WarFile} ROOT.war
EXPOSE 8080
CMD /usr/local/tomcat/tomcat8/bin/catalina.sh run &> /web/logs/catalina.out
EOF
echo "[+] ############## $(date +%F_%T) 同步Dockerfile到harbor"
scp /tmp/Dockerfile-${warProName}-${Release} root@${Harbor}:/opt/${warProName}/Dockerfile
rm -rf /tmp/Dockerfile-${warProName}-${Release}
# echo "[+] ############## $(date +%F_%T) 下載profile"
# ssh root@${Harbor} "cd /opt/${warProName} && wget ${Nginx}/profile/${warProName}.tar.gz -o /dev/null"
echo "[+] ############## $(date +%F_%T) 下載war包"
ssh root@${Harbor} "cd /opt/${warProName} && wget ${Nginx}/${warProName}/${WarFile} -o /dev/null"
echo "[+] ############## $(date +%F_%T) 構建鏡像"
ssh root@${Harbor} "cd /opt/${warProName} && docker build -t harbor.vincent.com/library/${imageName}:${Release} ."
echo "[+] ############## $(date +%F_%T) 鏡像上傳到harbor"
ssh root@${Harbor} "docker push harbor.vincent.com/library/${imageName}:${Release}"
echo "[+] ############## $(date +%F_%T) 本地鏡像清除"
ssh root@${Harbor} "docker rmi harbor.vincent.com/library/${imageName}:${Release}"
echo "[+] ############## $(date +%F_%T) 鏡像 harbor.vincent.com/library/${imageName}:${Release}存儲到harbor完成"
  • 模版複製創建任務,構建發佈測試
gitsubpro='test'
gitsubproport='8082'
ips='192.168.1.171 192.168.1.172 192.168.1.173 192.168.1.174 192.168.1.175'
ipS='192.168.1.171\\n192.168.1.172\\n192.168.1.173\\n192.168.1.174\\n192.168.1.175'
gitns='gitns'
gitname='gitname'
gitlab='gitlab'
gitlabcredentialsid='gitlabcredentialsid'
nginx='http://dockerjenkins:8080'
harbor='harbor.vincent.com'
lbnginx='lbnginx'
lbnginxconf='lbnginxconf'
cd /var/lib/jenkins/jobs/
cp -av deploy-template-v2 ${gitsubpro}
sed -i "s|GitLab=\&quot;gitlab\&quot;|GitLab=\&quot;${gitlab}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|GitLabCredentialsId=\&quot;gitlabcredentialsid\&quot;|GitLabCredentialsId=\&quot;${gitlabcredentialsid}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|GitNS=\&quot;gitns\&quot;|GitNS=\&quot;${gitns}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|GitName=\&quot;gitname\&quot;|GitName=\&quot;${gitname}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|GitSubPro=\&quot;gitsubpro\&quot;|GitSubPro=\&quot;${gitsubpro}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|GitSubProPort=\&quot;gitsubproport\&quot;|GitSubProPort=\&quot;${gitsubproport}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|IPs=\&quot;ips\&quot;|IPs=\&quot;${ips}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|Nginx=\&quot;nginx\&quot;|Nginx=\&quot;${nginx}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|Harbor=\&quot;harbor\&quot;|Harbor=\&quot;${harbor}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|LbNginx=\&quot;lbnginx\&quot;|LbNginx=\&quot;${lbnginx}\&quot;|g" ${gitsubpro}/config.xml
sed -i "s|LbNginxConf=\&apos;lbnginxconf\&apos;|LbNginxConf=\&apos;${lbnginxconf}\&apos;|g" ${gitsubpro}/config.xml
sed -i "s|ips\&apos|${ipS}\&apos|g" ${gitsubpro}/config.xml
su - root /etc/init.d/jenkins restart
  • 上傳war包到對應位置
mkdir -pv /tmp/test && cd /tmp/test
echo test > index.html
zip -r ROOT.zip ./
mkdir /usr/share/nginx/html/test
mv -v ROOT.zip /usr/share/nginx/html/test
  • 網頁登陸Jenkins,使用任務進行構建部署測試

[TOC]

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