pipeline配置前端项目
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丢弃旧的构建参数,相同
pipeline配置前端项目的更多相关文章
- gulp 配置前端项目打包
项目发布时,需要对项目js文件进行压缩,混淆,连接等操作以减小项目http请求,加快访问. gulpjs.com中有很多插件可以用来配置打包部署. 需要用的常用插件有: gulp-jsmin 压缩j ...
- pipeline配置java项目
pipeline { agent { label 'slave' } options { timestamps() disableConcurrentBuilds() buildDiscarder( ...
- 基于node的前端项目代码包发布至nexus
目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...
- vsCode怎么为一个前端项目配置ts的运行环境
vsCode为一个前端项目配置ts的运行环境,ts文件保存的时候自动编译成js文件: 假设此前端项目名称为Web:文件结构如图 1. 在根目录中新建一个“.vscode”文件夹,里面建一个“tasks ...
- VUE前端项目配置代理解决跨域问题
VUE前端项目配置代理解决跨域问题 问题如下,经常在本地调试接口出现这种问题 解决方式1:Chrome 的扩展插件 以前使用Chrome 的扩展插件,但是有时候还是会出现莫名其妙的问题. 需要梯子才行 ...
- nodejs解压版安装和配置(带有搭建前端项目脚手架)
nodejs 安装 我先前用了nvm,觉得nvm挺厉害可以随时更换nodejs版本,但是研究了下,可能自己功力不够还是什么,并不好用,中间还出现了错误:所以最后还是卸载了: 本文图文并茂的一步一步的 ...
- 基于云原生DevOps服务自动化部署前端项目学习总结
本文主要以部署前端Vue项目为例,讲述了如何基于云原生DevOps服务自动化部署前端项目~从开发完成到线上环境,我们只需提交代码即可~ 一.引言 作为一名开发人员,日常工作中我们除了需要负责代码的开发 ...
- 用gulp构建你的前端项目
前言 前端技术发展日新月异,随着模块化.组件化的提出,前端变得越来越复杂,静态资源越来越多,那么对静态资源的处理,如压缩,合并,去掉调试信息.. 如果还是人工去处理,效率非常之低且还容易出错,于是自动 ...
- 学习安装并配置前端自动化工具Gulp
Gulp和所有Gulp插件都是基于nodeJs来运行的,因此在你的电脑上需要安装nodeJs,安装过程请移驾安装并配置前端自动化工具--grunt.安装完成后,通过运行cmd进入DOS命令窗口,如图: ...
随机推荐
- 记一次 .NET 某电商无货源后端服务 死锁分析
一:背景 1. 讲故事 这个月初,星球里的一位朋友找到我,说他的程序出现了死锁,怀疑是自己的某些写法导致mongodb出现了如此尴尬的情况,截图如下: 说实话,看过这么多dump,还是第一次遇到真实的 ...
- Go语言核心36讲(Go语言实战与应用八)--学习笔记
30 | 原子操作(下) 我们接着上一篇文章的内容继续聊,上一篇我们提到了,sync/atomic包中的函数可以做的原子操作有:加法(add).比较并交换(compare and swap,简称 CA ...
- 设计模式学习-使用go实现模板模式
模板模式 定义 模板模式的作用 优点 缺点 适用范围 代码实现 回调 模板模式 VS 回调 参考 模板模式 定义 模板模式(TemplateMethod):定义一个操作中的算法骨架,而将一些步骤延迟到 ...
- [bzoj1190]梦幻岛宝珠
根据$2^b$分组,组内处理出g[i][j]表示当容量为$j\cdot 2^{i}$且只能选b=i时最大价值,再组间dp用f[i][j]表示当容量为$j\cdot 2^{i}+(w\&(2^{ ...
- [loj2494]寻宝游戏
将$n+1$个数字(还有0)标号为$[0,n]$,那么定义$a_{i,j}$表示第j个数上第i位上的值,如果第$i-1$个数与第$i$个数之间的运算符为与,那么令$b_{i}=1$,否则$b_{i}= ...
- [noi1774]array
容易想到树套树,但数据范围太大,会超时 考虑平衡树的作用,就是将这个区间内的所有数排序,所以可以离线+归并来处理,预处理复杂度$o(n\log n)$,然后考虑维护:1.删除:2.询问 删除操作维护可 ...
- 析构函数与this指针
二.析构函数 1.知识点介绍 析构函数和构造函数一样,也是一种特殊的函数,主要的作用是在对象结束生命周期时,系统自动调用析构函数,来做一些清理工作,比如在对象中有申请内存,那么是需要自己去释放内存的, ...
- win10的docker配置nginx
进入容器内部: docker exec -it 2b9676bf24ef /bin/bash配置映射关系:前面是本地的后面是docker的 --privileged=true 是可以多个,百度到的do ...
- arthas 简单使用
简介 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 官网地址:https://arthas.aliyun.com/ 它可以做什么,以下功能都是直接操作线上跑着的jar包!!! ...
- Codeforces 1373F - Network Coverage(模拟网络流)
Codeforces 题面传送门 & 洛谷题面传送门 提供一个模拟网络流的题解. 首先我们觉得这题一脸可以流的样子,稍微想想可以想到如下建图模型: 建立源点 \(S,T\) 和上下两排点,不妨 ...