一、项目打包 vue打包并上传服务器 vue2.0 vue2.0+vue-cli vue3.0版本 vue3.0 + vite
二、jenkins的token获取
jenkins 有那些api, 那些入参出差在 /jenkins/xxx/xxx/api查看
三、更新jenkins
调用跟新jenkins 之前,先查询一遍,jenkins的状态接口
let userName = 'xxx'
let token = 'xxxx'
let jenkinsHost = 'xxx.xxx.xxx.xxx:xxx'
// 查看jenkins更新状态
const checkStatus = () => {
return new Promise((resolve, reject) => {
axios.get(`http://${userName}:${token}@${jenkinsHost}/jenkins/xxx/xxx/api/json`){
.then(response => response.data)
.then(data => {
// 处理返回的数据, 打印最后一个完成状态的number值和最后一个失败状态的number值,后续判断是否更新成功需要
console.log('checkStatus success', data.lastCompletedBuild.number, data.lastFailedBuild.number)
resolve(data)
})
.catch(error => {
// 处理错误
console.error('checkStatus err')
resolve(-1)
})
})
}
更新jenkins 数据
let arrangeResult = false
const handlerData = async (preCompletedBuildNumber) => {
let result = await checkStatus()
if (result == -1) {
handlerData(preCompletedBuildNumber)
return
}
console.log('preCompletedBuildNumber', preCompletedBuildNumber, result.lastCompletedBuild.number)
// 比较当前完整状态number是否等于上一完成状态的number值 + 1
if (result.lastCompletedBuild.number == preCompletedBuildNumber + 1) {
// 比较当前完整状态是成功还是失败
if (result.lastFailedBuild.number == result.lastCompletedBuild.number) {
console.log('jenkins部署失败')
} else{
console.log('jenkins部署成功')
}
arrangeResult = true
} else {
arrangeResult = false
}
}
const alginCheckStatus = (preCompletedBuildNumber) => {
console.log('alginCheckStatus', preCompletedBuildNumber)
return new Promise(async (resolve, reject) => {
// 当前完成状态等于上一个完成状态 + 1,那么jenkins部署结束
await handlerData(preCompletedBuildNumber)
let timer
if (arrangeResult) {
resolve()
return
}
timer = setInterval(async () => {
if (arrangeResult) {
resolve()
clearInterval(timer)
return
}
await handlerData(preCompletedBuildNumber)
}, 5000)
})
}
// api跟新jenkins
const updateJenkins = async () => {
let preStatus = await checkStatus()
if (preStatus == -1) {
updateJenkin()
return
}
// 获取上一个完整状态的number值,
let preCompletedBuildNumber = preStatus.lastCompletedBuild.number
return new Promise((resolve, reject) => {
const params = {
'xxx': 'xxx',
'xxx': 'xxx'
}
axios.post(`http://${userName}:${token}@${jenkinsHost}/jenkins/xxx/xxx/buildWithParameters`, qs.stringify(params), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(async (data) => {
// 处理返回的数据
await alginCheckStatus(preCompletedBuildNumber)
resolve()
})
})
})
}
三、updateJenkins.js完整代码
import axios from 'axios'
import qs from 'qs'
let userName = 'xxx'
let token = 'xxxx'
let jenkinsHost = 'xxx.xxx.xxx.xxx:xxx'
// 查看jenkins更新状态
const checkStatus = () => {
return new Promise((resolve, reject) => {
axios.get(`http://${userName}:${token}@${jenkinsHost}/jenkins/xxx/xxx/api/json`){
.then(response => response.data)
.then(data => {
// 处理返回的数据, 打印最后一个完成状态的number值和最后一个失败状态的number值,后续判断是否更新成功需要
console.log('checkStatus success', data.lastCompletedBuild.number, data.lastFailedBuild.number)
resolve(data)
})
.catch(error => {
// 处理错误
console.error('checkStatus err')
resolve(-1)
})
})
}
let arrangeResult = false
const handlerData = async (preCompletedBuildNumber) => {
let result = await checkStatus()
if (result == -1) {
handlerData(preCompletedBuildNumber)
return
}
console.log('preCompletedBuildNumber', preCompletedBuildNumber, result.lastCompletedBuild.number)
if (result.lastCompletedBuild.number == preCompletedBuildNumber + 1) {
if (result.lastFailedBuild.number == result.lastCompletedBuild.number) {
console.log('jenkins部署失败')
} else{
console.log('jenkins部署成功')
}
arrangeResult = true
} else {
arrangeResult = false
}
}
const alginCheckStatus = (preCompletedBuildNumber) => {
console.log('alginCheckStatus', preCompletedBuildNumber)
return new Promise(async (resolve, reject) => {
// 当前完成状态等于上一个完成状态 + 1,那么jenkins部署结束
await handlerData(preCompletedBuildNumber)
let timer
if (arrangeResult) {
resolve()
return
}
timer = setInterval(async () => {
if (arrangeResult) {
resolve()
clearInterval(timer)
return
}
await handlerData(preCompletedBuildNumber)
}, 5000)
})
}
// api跟新jenkins
const updateJenkins = async () => {
let preStatus = await checkStatus()
if (preStatus == -1) {
updateJenkin()
return
}
let preCompletedBuildNumber = preStatus.lastCompletedBuild.number
return new Promise((resolve, reject) => {
const params = {
'xxx': 'xxx',
'xxx': 'xxx'
}
axios.post(`http://${userName}:${token}@${jenkinsHost}/jenkins/xxx/xxx/buildWithParameters`, qs.stringify(params), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(async (data) => {
// 处理返回的数据
await alginCheckStatus(preCompletedBuildNumber)
resolve()
})
})
})
}