jenkins_pipeline前端_docker
1 pipeline { 2 agent any 3 4 environment { 5 imagename = '镜像名' 6 tag = "v${BUILD_NUMBER}" #版本号 7 } 8 9 stages { 10 stage('Pull code') { 11 steps { 12 echo "${imagename}:${tag}" 13 git credentialsId: 'git_key', url: 'git地址' 14 } 15 } 16 stage('Prepare') { 17 steps { 18 #修改版本 19 sh "sed -i 's/VERSION: \"[0-9]*\"/VERSION: \"${BUILD_NUMBER}\"/g' config/cdn.cfg.js" 20 sh 'cat config/cdn.cfg.js' 21 } 22 } 23 stage('Clean local history images') { 24 steps { 25 #清理仓库中旧的镜像 26 sh 'docker images | grep ${imagename} | awk \'{print $1":"$2}\' | xargs docker rmi || echo "DONE"' 27 } 28 } 29 30 stage('Build docker image') { 31 steps { 32 #打包项目到镜像并作标签 33 sh 'docker build --tag=${imagename}:${tag} .' 34 sh 'docker tag ${imagename}:${tag} 仓库地址/${imagename}:${tag}' 35 sh 'docker tag ${imagename}:${tag} 仓库地址/${imagename}:latest' 36 } 37 } 38 39 stage('Push docker image') { 40 steps { 41 #上传到镜像仓库 42 sh 'docker push 仓库地址/${imagename}:${tag}' 43 sh 'docker push 仓库地址/${imagename}:latest' 44 } 45 } 46 47 stage ('Deploy') { 48 steps { 49 script { 50 def remote = [:] 51 remote.name = '服务器命名' 52 remote.host = '项目机器IP' 53 remote.user = 'user' 54 remote.password = 'passwd' 55 remote.allowAnyHosts = true 56 #删除本地旧镜像,下载新镜像 57 sshCommand remote: remote, command: "docker rmi 仓库地址/${imagename}:latest || echo 'DONE'" 58 sshCommand remote: remote, command: "docker pull 仓库地址/${imagename}:latest" 59 sshCommand remote: remote, command: "docker pull 仓库地址/${imagename}:${tag}" 60 } 61 } 62 } 63 64 stage ('Restart service') { 65 steps { 66 script { 67 def remote = [:] 68 remote.name = '服务器命名' 69 remote.host = '项目机器IP' 70 remote.user = 'user' 71 remote.password = 'passwd' 72 remote.allowAnyHosts = true 73 #停止旧的容器并删除,启动新容器 74 sshCommand remote: remote, command: "docker stop ${imagename} || echo 'DONE'" 75 sshCommand remote: remote, command: "docker rm ${imagename} || echo 'DONE'" 76 sshCommand remote: remote, command: "docker run -td --name ${imagename} -p 7003:80 仓库地址/${imagename}:latest" 77 } 78 } 79 } 80 81 stage ('Clean history docker images on romote server') { 82 steps { 83 script { 84 def remote = [:] 85 remote.name = '服务器命名' 86 remote.host = '项目IP' 87 remote.user = 'user' 88 remote.password = 'passwd' 89 remote.allowAnyHosts = true 90 #删除旧版本 91 sshCommand remote: remote, command: "docker images 仓库地址/${imagename} --filter \"before=仓库地址/${imagename}:latest\" -q | xargs docker rmi || echo 'DONE'" 92 } 93 } 94 } 95 } 96 #配置bearychat报警 97 post { 98 unstable { 99 bearychatSend color: 'red', message: "${env.JOB_NAME},构建不稳定" 100 } 101 failure { 102 bearychatSend color: 'red', message: "${env.JOB_NAME},构建失败" 103 } 104 } 105 106 } 107 108 __________________________dockerfile____________________________________ 109 110 FROM node:10.16.2 as build-stage 111 112 ADD . /app 113 WORKDIR /app 114 ENV PATH /app/node_modules/.bin:$PATH 115 #RUN npm install --ignore-scripts --unsafe-perm 116 RUN npm install --registry=http://registry.npm.taobao.org --ignore-scripts --unsafe-perm 117 RUN npm run build 118 RUN gulp publish:production 119 120 FROM nginx:stable-alpine as production-stage 121 COPY config/nginx/nginx.conf /etc/nginx/conf.d/app.conf 122 COPY --from=build-stage /app/dist /usr/share/nginx/html 123 124 EXPOSE 80 125 CMD ["nginx", "-g", "daemon off;"] 126 127