部署非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]