jenkin 编写流水线之前端详细步骤
前端流水线
pipeline {
agent { label 'build' } #通过agent的标签去识别编译节点
environment #定义变量
{
// 新流水线需确认修改的有1、gitlab地址 2、npm run build 3、 agent { label 'local-eduAppTest' }
jobBaseName = "${env.JOB_BASE_NAME}" #流水线的名称,这个名称的变量是创建流水线的名称
gitUrl = "http://171.93.112.44:9999/chenweiqiang/smart-building-web-front.git" #仓库的地址
packCommand = "npm run build:prod" #前端编译的命令
deployNode = "local-eduAppTest" #部署的节点
nginxHtmlDir = "/opt/nginx/html" #前端部署的工作目录
webDir = "smart-building-web-front-test" #项目的目录名称
}
tools {
nodejs 'node-v24.11.1' #定义node.js的版本
}
stages {
stage('Clean Workspace') {
steps {
// 清除工作空间中的所有文件和目录
deleteDir()
}
}
stage('Checkout') {
steps {
// 使用 Git 拉取代码
git credentialsId: 'luyang', branch: "${params.branch}", url: "${gitUrl}" #拉取仓库以及通过变量选取分支
}
}
stage('Build') { #编译前端包
steps {
sh '''
which node
npm config set registry=https://registry.npmjs.org
npm cache clean --force
npm install --legacy-peer-deps
${packCommand}
tar -zcvf dist.tar.gz dist
ls -l
'''
// set +e
// 保存构建文件到 stash,供后续阶段使用
stash includes: 'dist.tar.gz', name: "arc_${env.JOB_BASE_NAME}" #将编译好的文件打包成dist.tar.gz包
}
}
stage('Deploy') {
agent { label "${deployNode}" } #选择节点
steps {
// 清除工作空间中的所有文件和目录
deleteDir()
// 从 stash 中恢复构建文件
unstash "arc_${env.JOB_BASE_NAME}"
sh '''
ls -l
nginx_html_dir="${nginxHtmlDir}"
web_dir="${webDir}"
now_time=$(date '+%Y%m%d%H%M%S')
mkdir -p ${nginx_html_dir}/versions/${web_dir}/${now_time}
tar -xf dist.tar.gz
mv dist ${nginx_html_dir}/versions/${web_dir}/${now_time}/
cd ${nginx_html_dir}
ln -sfT versions/${web_dir}/${now_time}/dist/ ${web_dir}
if [ $(ls -r versions/${web_dir} |sed 1,3d |wc -l) -eq 0 ];then
:
else
ls -r versions/${web_dir} |sed 1,3d |xargs -i rm -rf versions/${web_dir}/{}
fi
'''
}
}
}
}
浙公网安备 33010602011771号