部署非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=\"gitlab\"|GitLab=\"${gitlab}\"|g" ${gitsubpro}/config.xml
sed -i "s|GitLabCredentialsId=\"gitlabcredentialsid\"|GitLabCredentialsId=\"${gitlabcredentialsid}\"|g" ${gitsubpro}/config.xml
sed -i "s|GitNS=\"gitns\"|GitNS=\"${gitns}\"|g" ${gitsubpro}/config.xml
sed -i "s|GitName=\"gitname\"|GitName=\"${gitname}\"|g" ${gitsubpro}/config.xml
sed -i "s|GitSubPro=\"gitsubpro\"|GitSubPro=\"${gitsubpro}\"|g" ${gitsubpro}/config.xml
sed -i "s|GitSubProPort=\"gitsubproport\"|GitSubProPort=\"${gitsubproport}\"|g" ${gitsubpro}/config.xml
sed -i "s|IPs=\"ips\"|IPs=\"${ips}\"|g" ${gitsubpro}/config.xml
sed -i "s|Nginx=\"nginx\"|Nginx=\"${nginx}\"|g" ${gitsubpro}/config.xml
sed -i "s|Harbor=\"harbor\"|Harbor=\"${harbor}\"|g" ${gitsubpro}/config.xml
sed -i "s|LbNginx=\"lbnginx\"|LbNginx=\"${lbnginx}\"|g" ${gitsubpro}/config.xml
sed -i "s|LbNginxConf=\'lbnginxconf\'|LbNginxConf=\'${lbnginxconf}\'|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]