web前端项目 打包上传服务器用api方式 更新 jenkins

184 阅读1分钟

一、项目打包 vue打包并上传服务器 vue2.0 vue2.0+vue-cli vue3.0版本 vue3.0 + vite

二、jenkins的token获取

image.png

image.png

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()
        })
      })
  })
}