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命令窗口,如图: ...
随机推荐
- layui使用html+servlet+ajax实现登录验证
我们一般使用的都是form表单提交到Servlet来实现前端和后端的交互的.这次我使用的是ajax提交数据,实现登录操作. 首先我们需要的是一套layui模板,这里用到layui的js和css界面. ...
- halcon基础算子介绍(窗口创建,算子运行时长,是否启用更新函数)
前言 halcon有有大约1500个算子,我总结一些简单大家用得到的算子,比如创建窗口的方式有3种,接下来结束这方式,及其异同点等! 1.窗口创建的三种方式 1.1使用dev_open_window算 ...
- [luogu7078]贪吃蛇
结论:若$a_{n}-a_{1}\ge a_{2}$,那么一定会吃掉 证明:分类讨论,若$a_{n-1}$也吃掉了$a_{2}$,就说明$a_{n-1}$之后不会被吃掉,而$a_{n-1}-a_{2} ...
- HashSet 如何保证元素不重复——hash码
HashSet 不重复主要add 方法实现,使用 add 方法找到是否存在元素,存在就不添加,不存在就添加.HashSet 主要是基于HashMap 实现的,HashMap 的key就是 HashSe ...
- java配置方法
1.新建一个Config文件夹 2.代码 package com.shao.config; import com.shao.pojo.User; import org.springframework. ...
- 解决FastJson中"$ref重复引用"的问题方法
对象的引用重复使用造成了重复引用问题,Fastjson默认开启引用检测将相同的对象写成引用的形式: 1 2 3 4 5 {"$ref": "$"} // 引用根 ...
- DataGrid首次进入页面时,不加载任何数据[转]
首次不加载数据问题,必须搞明白如何才能不加载数据.根据Easu UI的官方API: http://www.jeasyui.com/documentation/ 仔细观察DataGrid的事件当中有一个 ...
- JavaScript 函数声明和变量声明
声明语句:声明语句是用来声明或定义标识符(变量和函数名)并给其赋值. 1:var 变量声明(5.3.1节): var语句用来声明一个或多个变量:var name_1 = [= value_1] [ , ...
- AtCoder Grand Contest 055 题解
A 赛时直到最后 10min 才做出这个 A 题,之前猜了一个结论一直没敢写,本来不抱啥希望 AC 的结果比赛结束时交了一发竟然 A 了,由此可见我的水平之菜/dk 考虑每次取出字符串开头字符,不妨设 ...
- Codeforces 506E - Mr. Kitayuta's Gift(神仙矩阵乘法)
Codeforces 题目传送门 & 洛谷题目传送门 神仙题 %%%%%%%%%%%%% u1s1 感觉这道题风格很省选( 下记 \(m=|s|\),首先探讨 \(n+m\) 为偶数的情形. ...