生产项目容器化改造(三)使用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]

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