vue

pipeline {
agent { label 'master'} options {
timestamps()
disableConcurrentBuilds()
buildDiscarder(
logRotator(
numToKeepStr: '20',
daysToKeepStr: '30',
)
)
} parameters {
choice(
name: "DEPLOY_FLAG",
choices: ['deploy', 'rollback'],
description: "发布/回滚"
)
} /*=======================================常修改变量-start=======================================*/ environment {
gitUrl = "git地址"
branchName = "选择分支"
gitlabCredentialsId = "git凭证"
projectBuildDir = "build"
projectBuildPath = "${env.WORKSPACE}/${projectBuildDir}/"
nginxIp = "发布ip"
nginxHtmlRoot = "/tmp/${env.JOB_NAME}"
owner = "font"
group = "font"
backupRootDir = "/opt/backup"
backupJob = "${backupRootDir}/${env.JOB_NAME}"
backupDir = "${backupJob}/${env.BUILD_NUMBER}"
rollbackVersion = ""
} /*=======================================常修改变量-end=======================================*/ stages {
stage('Deploy') {
when {
expression { return params.DEPLOY_FLAG == 'deploy' }
}
stages {
stage('Pre Env') {
steps {
echo "======================================项目名称 = ${env.JOB_NAME}"
echo "======================================项目 URL = ${gitUrl}"
echo "======================================项目分支 = ${branchName}"
echo "======================================当前编译版本号 = ${env.BUILD_NUMBER}"
echo "======================================项目 Build 文件夹路径 = ${projectBuildPath}"
echo "======================================项目 Nginx 的 ROOT 路径 = ${nginxHtmlRoot}"
}
} stage('Git Clone') {
steps {
git branch: "${branchName}",
credentialsId: "${gitlabCredentialsId}",
url: "${gitUrl}"
}
} stage('NPM Install') {
steps {
nodejs('nodejs') {
sh "npm install"
}
}
} stage('NPM Build') {
steps {
nodejs('nodejs') {
sh "npm run build"
}
}
} stage('Backup') {
agent { label 'ansible'}
steps {
script {
try {
isItBackupToday = sh (returnStatus: true, script:'ansible ${nginxIp} -m shell -a "ls -l --time-style=+%D ${backupJob} | grep $(date +%D)"')
if (isItBackupToday !=0){
try {
sh 'ansible ${nginxIp} -m file -a "path=${backupDir} state=directory owner=${owner} group=${group}"'
sh 'ansible ${nginxIp} -m shell -a "cp -a ${nginxHtmlRoot}/* ${backupDir}"'
}
catch (exc) {
echo 'Something failed!'
}
}
}
catch (exc) {
echo 'Something failed!'
}
}
}
} stage('Nginx Deploy') {
agent { label 'ansible'}
steps {
sh 'ansible ${nginxIp} -m synchronize -a "src=${projectBuildPath} dest=${nginxHtmlRoot} delete=yes"'
sh 'ansible ${nginxIp} -m file -a "path=${nginxHtmlRoot} owner=${owner} group=${group} recurse=yes"'
}
} stage('Tar Build') {
steps {
sh "tar -zcf ${env.JOB_NAME}.tar.gz ${projectBuildDir}"
}
} stage('Archive Artifacts') {
steps {
archiveArtifacts "${env.JOB_NAME}.tar.gz"
}
}
}
} stage('Rollback') {
when {
expression { return params.DEPLOY_FLAG == 'rollback' }
}
agent { label 'ansible'}
steps{
script {
sh 'ansible ${nginxIp} -m shell -a "ls -l ${backupJob}" | grep -v "CHANGED"'
rollbackVersion = input(
message: "请填写要回滚的版本",
parameters: [
string(name:'BUILD_NUMBER')
]
)
sh 'ansible ${nginxIp} -m file -a "path=${nginxHtmlRoot} state=absent"'
sh 'ansible ${nginxIp} -m file -a "path=${nginxHtmlRoot} state=directory owner=${owner} group=${group}"'
withEnv(["rollbackVersion=${rollbackVersion}"]){
sh 'ansible ${nginxIp} -m shell -a "cp -a ${backupJob}/${rollbackVersion}/* ${nginxHtmlRoot}"'
}
}
}
}
}
}

这个jenkinsfile中有保存 制品,

需要注意的是:制品的保存时间,和jenkins丢弃旧的构建参数,相同

最新文章

  1. Linux之搭建自己的根文件系统
  2. java项目上线过程
  3. IAR FOR ARM的安装及破解
  4. HTML+CSS学习笔记
  5. 功能更新到 Windows 10 企业版, 版本 1607
  6. UVA1583 最小生成元
  7. [翻译]:SQL死锁-锁的类型
  8. new road
  9. c++ 进程权限的提升
  10. 实现方法 C# button快捷键
  11. BZOJ 3107 二进制a+b
  12. Selenium webdriver 操作chrome 浏览器
  13. jQuery实现密保互斥问题
  14. 玩转html5(一)-----盘点html5新增的那些酷酷的input类型和属性
  15. 配置SQL Server 2008的资源调控器实现负载均衡
  16. VB webbrowser 控件的应用(跨域 内嵌网页元素的访问)
  17. julia .文档
  18. js 防抖 debounce 与 节流 throttle
  19. January 06th, 2018 Week 01st Saturday
  20. LeetCode 49 Group Anagrams(字符串分组)

热门文章

  1. 菜鸡的Java笔记 第三十三 - java 泛型
  2. SQL语句修改字段类型与第一次SQLServer试验解答
  3. [bzoj1145]图腾
  4. 论文翻译:2020_WaveCRN: An efficient convolutional recurrent neural network for end-to-end speech enhancement
  5. .net core 和 WPF 开发升讯威在线客服系统:使用本地IP数据库实现访客来源快速定位,支持国外
  6. System类的常用方法(currentTimeMillis与arraycopy)
  7. Java跟JavaScript两者间的关系和区别
  8. 洛谷 P6276 - [USACO20OPEN]Exercise P(组合数学+DP)
  9. go搭建beego框架 go安装bee报错 github.com/derekparker/delve@v1.4.0: parsing go.mod:
  10. android 点击图片从Fragment跳转到activity