- 选择使用声明式pipeline,简单直观,同时如果根据需求,可以嵌套以script使用groovy语法
pipeline脚本的注意事项
声明式脚本中通过script使用groovy语法,需要调用定义的环境变量,需要加env,例如本文中,if (env.Branch == ‘uat’),测试在scrip中,不能通过echo打印定义的环境变量
scp拷贝front目录下的所有文件到远程主机的work目录下: scp -rp /front/* 1.1.1.1:/data/work/;拷贝front文件,则scp -rp /front 1.1.1.1:/data/work/
修改Jenkins的job名字,对应job在workspace下的代码路径也发生改变,所以Jenkinsfile中如有引用路径,需要做出改变
Jenkinsfile中涉及的账密、token都可以通过自带的模块,隐式以凭证的方式调用,增加安全性
telegram报警,使用Jenkins的插件Telegram Bot,出现偶尔不能收到通知的问题,此处直接通过post的方式发送通知
Declarative Pipeline中调用scrip的方式实现:
pipeline {
agent any
parameters {
choice choices: [‘uat’, ‘release’], description: ‘请选择分支,发布到对应的环境!’, name: ‘Branch’
}
environment {
git_auth = '3f269719-e6a8-46e5-a4bc-bef85a26a00d'
git_address = 'https://gitlab.abc.club/123/front_h5.git'
}
stages {
//第一步
stage('代码拉取') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
}
}
// 第二步
stage('编译'){
steps {
sh 'npm run build'
}
}
// 第三步
stage('部署代码至Release'){
steps {
//此处部署到不同分支,也可以使用声明式pipeline中的when{},但要分成两个stage,显得臃肿,所以此处使用groovy的if/else if 来实现
script {
if (env.Branch == 'uat') {
echo '正在发布到UAT环境中......'
sh 'scp -rp /data/jenkins/workspace/ur-live-h5/dist 172.31.12.127:/data/work/live_h5/'
} else if (env.Branch == 'release') {
echo '正在发布到release环境中......'
sh 'scp -rp /data/jenkins/workspace/ur-live-h5/dist 172.31.12.127:/data/work/live_h5/'
}
}
}
}
// 第四步
stage('发送telegram通知') {
steps {
//使用 withCredentials加密telegram的token以及chat_id
withCredentials([string(credentialsId: '6b7f2000-ac4c-4423-9283-18d449e56b79', variable: 'Chat_ID'), string(credentialsId: 'aedd248d-13aa-4047-8e3d-1cb2e3e05833', variable: 'Tele_Token')]) {
sh 'curl -s -X POST https://api.telegram.org/bot$Tele_Token/sendMessage -d chat_id=$Chat_ID -d text="uat_live_H5发布成功, 请测试!"'
}
}
}
}
}
使用声明式pipeline中的when来实现如下:
pipeline {
agent any
parameters {
choice choices: [‘uat’, ‘release’], description: ‘请选择分支,发布到对应的环境!’, name: ‘Branch’
}
environment {
git_auth = '3f269719-e6a8-46e5-a4bc-bef85a26a00d'
git_address = 'https://gitlab.abc.com/123/h5_h5.git'
}
stages {
//第一步
stage('代码拉取') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
}
}
// 第二步
stage('编译'){
steps {
sh 'npm run build'
}
}
// 第三步
stage('部署代码至UAT'){
when {
environment name: 'Branch', value: 'uat'
}
steps {
echo '正在发布到UAT环境中......'
sh 'scp -rp /data/jenkins/workspace/ur-live-h5/dist 172.31.12.127:/data/work/live_h5/'
}
}
// 第三步
stage('部署代码至Release'){
when {
environment name: 'Branch', value: 'release'
}
steps {
echo '正在发布到release环境中......'
//sh 'scp -rp /data/jenkins/workspace/ur-live-h5/dist 172.31.12.127:/data/work/live_h5/'
}
}
// 第四步
stage('发送telegram通知') {
steps {
//使用 withCredentials加密telegram的token以及chat_id
withCredentials([string(credentialsId: '6b7f2000-ac4c-4423-9283-18d449e56b79', variable: 'Chat_ID'), string(credentialsId: 'aedd248d-13aa-4047-8e3d-1cb2e3e05833', variable: 'Tele_Token')]) {
sh 'curl -s -X POST https://api.telegram.org/bot$Tele_Token/sendMessage -d chat_id=$Chat_ID -d text="uat_live_H5发布成功, 请测试!"'
}
}
}
}
}
-
使用声明式的pipeline发布前端H5代码,完全通过脚本实现uat、release环境的发布。
-
使用Jenkins自带的blue ocean发布,简单直观,如下图: