啥也不想说,崩溃+1
#!groovy
@NonCPS
def get_userid() {
// userId = "auto"
def job = Jenkins.getInstance().getItemByFullName(env.JOB_NAME, Job.class)
def build = job.getBuildByNumber(env.BUILD_ID as int)
try{
def userId = build.getCause(Cause.UserIdCause).getUserId()
} catch (Exception e) {
return "auto deploy"
}
def userId = build.getCause(Cause.UserIdCause).getUserId()
return userId
}
def call(cfg) {
// 导入封装的方法
def method = new org.encapsulation.method()
// 导入docker模块
def docker = new org.devops.docker()
// 导入sonar模块
// def sonar = new org.devops.sonar()
// 导入jira模块
// def jira = new org.devops.jira()
// 导入通用模块
def tools = new org.devops.tools()
// 获取用户名
def BUILD_USER = get_userid()
// 导入默认配置
method.defaultConf()
properties([
parameters([
[$class: 'ChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
description: '项目组所在namespace',
name: 'NAME_SPACE',
randomName: 'choice-parameter-1',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: false,
script:
'return[\'刷新网页\']'
],
script: [
classpath: [],
sandbox: false,
script:
'''import groovy.json.JsonSlurper
def Get_env() {
def project_name_list = []
def conn ="https://harbor.xxx.xxx.xxx/api/v2.0/projects"
def parser = new JsonSlurper()
def http = new URL(conn).openConnection()
def auth_token = "user:pass"; def basic_auth = "Basic ${auth_token.bytes.encodeBase64().toString()}";
http.setRequestProperty("Authorization", basic_auth)
http.setRequestMethod('GET')
def getRC = http.getResponseCode()
if(getRC.equals(200)) {
res=http.getInputStream().getText()
def json = parser.parseText(res)
println json
for (project in json){
project_name_list += project.name
}
return project_name_list
}
}
Get_env()'''
]
]
],
[$class: 'CascadeChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
description: '请选择Harbor中DockerImage的名字',
name: 'DOCKER_IMAGE',
randomName: 'choice-parameter-2',
referencedParameters: 'NAME_SPACE',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: false,
script:
'return[\'没有选择任何的项目\']'
],
script: [
classpath: [],
sandbox: false,
script:
'''import groovy.json.JsonSlurper
def Get_env(NAME_SPACE) {
def project_name_list = []
def conn ="https://harbor.xxx.xxx.xxx/api/v2.0/projects/${NAME_SPACE}/repositories?project_name=${NAME_SPACE}"
def parser = new JsonSlurper()
def http = new URL(conn).openConnection()
def auth_token = "user:pass"; def basic_auth = "Basic ${auth_token.bytes.encodeBase64().toString()}";
http.setRequestProperty("Authorization", basic_auth)
http.setRequestMethod('GET')
def getRC = http.getResponseCode()
if(getRC.equals(200)) {
res=http.getInputStream().getText()
def json = parser.parseText(res)
println json
for (project in json){
println project.name
docker_image_name = project.name - "${NAME_SPACE}" - "/"
project_name_list += docker_image_name
}
return project_name_list
}
}
Get_env(NAME_SPACE)'''
]
]
],
[$class: 'CascadeChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
description: '请选择Harbor中Docker的TAG',
name: 'GROUPA_DOCKER_TAG',
randomName: 'choice-parameter-3',
referencedParameters: 'NAME_SPACE,DOCKER_IMAGE',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: false,
script:
'return[\'没有选择任何的项目\']'
],
script: [
classpath: [],
sandbox: false,
script:
'''import groovy.json.JsonSlurper
def Get_env(NAME_SPACE,DOCKER_IMAGE_NAME) {
def project_name_list = []
def conn ="https://harbor.xxx.xxx.xxx/api/v2.0/projects/${NAME_SPACE}/repositories/${DOCKER_IMAGE_NAME}/artifacts?project_name=${NAME_SPACE}&repository_name=${DOCKER_IMAGE_NAME}"
def parser = new JsonSlurper()
def http = new URL(conn).openConnection()
def auth_token = "user:pass"; def basic_auth = "Basic ${auth_token.bytes.encodeBase64().toString()}";
http.setRequestProperty("Authorization", basic_auth)
http.setRequestMethod('GET')
def getRC = http.getResponseCode()
if(getRC.equals(200)) {
res=http.getInputStream().getText()
def json = parser.parseText(res)
for (project in json){
for (image_tag in project.tags){
project_name_list += image_tag.name
}
}
return project_name_list
}
}
Get_env(NAME_SPACE,DOCKER_IMAGE)
'''
]
]
],
[$class: 'CascadeChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
description: '请选择Harbor中Docker的TAG',
name: 'GROUPB_DOCKER_TAG',
randomName: 'choice-parameter-4',
referencedParameters: 'NAME_SPACE,DOCKER_IMAGE',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: false,
script:
'return[\'没有选择任何的项目\']'
],
script: [
classpath: [],
sandbox: false,
script:
'''import groovy.json.JsonSlurper
def Get_env(NAME_SPACE,DOCKER_IMAGE_NAME) {
def project_name_list = []
def conn ="https://harbor.xxx.xxx.xxx/api/v2.0/projects/${NAME_SPACE}/repositories/${DOCKER_IMAGE_NAME}/artifacts?project_name=${NAME_SPACE}&repository_name=${DOCKER_IMAGE_NAME}"
def parser = new JsonSlurper()
def http = new URL(conn).openConnection()
def auth_token = "user:pass"; def basic_auth = "Basic ${auth_token.bytes.encodeBase64().toString()}";
http.setRequestProperty("Authorization", basic_auth)
http.setRequestMethod('GET')
def getRC = http.getResponseCode()
if(getRC.equals(200)) {
res=http.getInputStream().getText()
def json = parser.parseText(res)
for (project in json){
for (image_tag in project.tags){
project_name_list += image_tag.name
}
}
return project_name_list
}
}
Get_env(NAME_SPACE,DOCKER_IMAGE)
'''
]
]
]
])
])
pipeline {
agent {
kubernetes {
label "xxx-xxx"
}
}
// jenkins 配置设置
options {
timestamps() //日志会有时间
skipDefaultCheckout() //删除隐式checkout scm语句
disableConcurrentBuilds() //禁止并行
timeout(time: 1, unit: 'HOURS') //流水线超时设置1h
}
// 参数设置
// parameters {
// }
// 常量参数,初始确定后一般不需更改
// environment {
// }
post {
success {
script{
currentBuild.description = "\n 构建成功!"
method.notice("success","${cfg.CI_ROBOT_ID}","${JOB_NAME}","${JOB_URL}","${BUILD_USER}","build success")
}
}
failure {
script{
currentBuild.description = "\n 构建失败!"
method.notice("error","${cfg.CI_ROBOT_ID}","${JOB_NAME}","${JOB_URL}","${BUILD_USER}","build faild")
}
}
aborted {
script{
currentBuild.description = "\n 构建取消!"
}
}
always {
cleanWs()
}
}
//步骤设置
stages {
// stage('确认发版') {
// input {
// message "您发版的项目为${Release_Project},是否继续?"
// ok '确定'
// }
// steps{
// println Release_Project
// }
// }
stage('部署服务') {
steps {
container("${cfg.CI_EKS_NAME}") {
script{
withCredentials([usernamePassword(credentialsId: 'harbor-admin', passwordVariable: 'password', usernameVariable: 'username')]) {
sh """
helm repo add --username=${username} --password=${password} ${DOCKER_IMAGE} https://harbor.xxx.xxx.xxx/chartrepo/${NAME_SPACE}
helm repo update
helm upgrade -i -n ${NAME_SPACE} --set server.GroupA.image.tag=${GROUPA_DOCKER_TAG} --set server.GroupB.image.tag=${GROUPB_DOCKER_TAG} ${DOCKER_IMAGE} ${DOCKER_IMAGE}/${DOCKER_IMAGE}
"""
}
}
}
}
}
}
}
}
文章转载自耶喝运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




