暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何在Pipeline中使用Active Choice插件获取harbor tag

耶喝运维 2020-08-27
1391

啥也不想说,崩溃+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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论