pipeline实践

agent any
parameters {
    gitParameter(
        name: 'BRANCH_TAG', 
        type: 'PT_BRANCH_TAG', 
        branchFilter: 'origin/(.*)', 
        defaultValue: 'main', 
        selectedValue: 'DEFAULT', 
        sortMode: 'DESCENDING_SMART',
        description: '请选择需要部署的的"Branch/Tag":',
        quickFilterEnabled: true
    )
    choice(name: 'ARCH', choices: ['arm-xc','x86 + arm'], description: '请选择需要构建的系统架构')
    choice(name: 'CICD', choices: ['only-ci','cicd','only-cd'], description: '请选择CICD环节')
    //string(name: 'IMG', defaultValue: 'reg1.pa.zkj.com/base/agent-flow-web:v1', description: '请输入您only-cd的镜像-[不构建仅发布]')
}    
environment {
    FEISHU_WEBHOOK='https://open.feishu.cn/open-apis/bot/v2/hook/67a797b0-d590-4fef-911d-2bc45bd89fb4'
    TODAY = sh(script: 'date +"%Y%m%d"', returnStdout: true).trim()
    microservice="ai-gateway"
    git_code_url='http://codelab.msxf.com/tianqiong-sys/ai-gateway.git'  
    git_k8s_control='http://10.245.172.86:30080/devops/helm.git'
    credentials_id_code="gitcode-down-gxf"
    credentials_id_control="gitcontrol-down-gxf"
    k8s_dir="docker"
    helm_father="helm_father"
    //env="poweragent"
    //harbor="reg1.pa.zkj.com"
    //img_addr="${harbor}/${env}/${microservice}"
    harbor="aiharbor.msxf.local"
    env="mirror-stuff"
}
stages {
    stage("clear-old") {
        steps{
	        dir("${WORKSPACE}") {
	          sh "pwd" 
	          sh "rm -rf ./*"
	        }
        }
    }
    stage('git-pull or git-check') {
        steps{
            echo '============ git-pull or git-check code ==============='
            checkout([$class: 'GitSCM', 
                      branches: [[name: "${params.BRANCH_TAG}"]], 
                      doGenerateSubmoduleConfigurations: false, 
                      extensions: [], 
                      gitTool: 'Default', 
                      submoduleCfg: [], 
                      userRemoteConfigs: [[url: "${git_code_url}",credentialsId: "${env.credentials_id_code}",]],
                      skip: true
                    ])
            script {
                // 方法1:使用环境变量
                //env.COMMIT_ID = env.GIT_COMMIT
                // 方法2:手动执行 Git 命令(备用)
                env.COMMIT_ID = sh(
                    script: 'git rev-parse HEAD',
                    returnStdout: true
                ).trim()
                // 获取短 Commit ID
                //env.SHORT_COMMIT = env.COMMIT_ID.substring(0,7)
                echo "${env.COMMIT_ID}"
            }
		    echo '=============== checkout helm_father ========================'
            sh "mkdir -p ${helm_father}"
            dir("${WORKSPACE}/${helm_father}"){
                git url: "${git_k8s_control}",
		        credentialsId: "${env.credentials_id_control}",
		        branch: "master"
            }
	    }
    }
	stage("docker Build and Push"){
        when {
            anyOf {
                expression { params.CICD == 'only-ci' }
                expression { params.CICD == 'cicd' }
            }
        }
	    steps{
	        echo "====================Build.sh========================================"
            dir("${WORKSPACE}"){
                script{
                    def maxRetries = 5
                    def attempt = 0
                    retry(maxRetries) {
                        attempt++
                        echo "========= 这是在尝试第${attempt}次执行,共${maxRetries}次。==================="  
                        sh '''
                            chmod 777 wasm-go/ -R
                            cd wasm-go
                            sh build.sh
                        '''
                    }                            
                }
            }
            dir("${WORKSPACE}"){
                script{
                    ['Dockerfile.higress-gateway','Dockerfile','Dockerfile.api','Dockerfile.opa','Dockerfile.uploader'].each {file ->
                        sh "sed -i '/^FROM/a\\\\LABEL BRANCH_TAG=${BRANCH_TAG}\\nLABEL COMMIT_ID=${env.COMMIT_ID}' docker/${file}"
                    }
                }
                script{
                    EXTAR_HOSTS="--add-host=npm.msxf.local:10.99.1.10 \
                                 --add-host=npm.msxf.com:10.99.1.10 \
                                 --add-host=nexus3-master.msxf.com:10.99.1.10 \
                                 --add-host=nexus3.msxf.com:10.99.1.10 \
                                 --add-host=aiharbor.msxf.local:10.112.2.65 \
                                 --add-host=proxy.golang.org:142.251.33.81" 
                    if (params.ARCH == 'arm-xc'){
                        parallel (
                            "gateway": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build -f docker/Dockerfile.higress-gateway --no-cache $EXTAR_HOSTS --platform linux/arm64 -t ${harbor}/${env.env}/gateway:${env.TODAY}-${BUILD_ID} . --push"                                           
                                    }
                                }
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/gateway:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            },
                            "controller": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build --builder builder-1 -f docker/Dockerfile --no-cache $EXTAR_HOSTS --platform linux/arm64 -t ${harbor}/${env.env}/controller:${env.TODAY}-${BUILD_ID} . --push"    
                                    }
                                }
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/controller:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            },
                            "maip-gw-ctrl-api": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build --builder builder-2 -f docker/Dockerfile.api --no-cache $EXTAR_HOSTS --platform linux/arm64 -t ${harbor}/${env.env}/maip-gw-ctrl-api:${env.TODAY}-${BUILD_ID} . --push" 
                                    }
                                }                                    
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/maip-gw-ctrl-api:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            },
                            "opa": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build --builder builder-3 -f docker/Dockerfile.opa --no-cache $EXTAR_HOSTS --platform linux/arm64 -t ${harbor}/${env.env}/opa:${env.TODAY}-${BUILD_ID} . --push"
                                    }
                                }
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/opa:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            },
                            "maip-gw-ctrl-wasm-uploader": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build --builder builder-4 -f docker/Dockerfile.uploader --no-cache $EXTAR_HOSTS --platform linux/arm64 -t ${harbor}/${env.env}/maip-gw-ctrl-wasm-uploader:${env.TODAY}-${BUILD_ID} . --push" 
                                    }
                                }
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/maip-gw-ctrl-wasm-uploader:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            }
                        )
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/gateway:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/controller:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/maip-gw-ctrl-api:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/opa:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/maip-gw-ctrl-wasm-uploader:${env.TODAY}-${BUILD_ID} 已构建好推仓"                            
                    }else if (params.ARCH == 'x86 + arm'){
                        parallel (
                            "gateway": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build -f docker/Dockerfile.higress-gateway $EXTAR_HOSTS --platform linux/arm64,linux/amd64 -t ${harbor}/${env.env}/gateway:${env.TODAY}-${BUILD_ID} . --push"                                           
                                    }
                                }
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/gateway:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            },
                            "controller": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build --builder builder-1 -f docker/Dockerfile $EXTAR_HOSTS --platform linux/arm64,linux/amd64 -t ${harbor}/${env.env}/controller:${env.TODAY}-${BUILD_ID} . --push"    
                                    }
                                }
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/controller:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            },
                            "maip-gw-ctrl-api": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build --builder builder-2 -f docker/Dockerfile.api $EXTAR_HOSTS --platform linux/arm64,linux/amd64 -t ${harbor}/${env.env}/maip-gw-ctrl-api:${env.TODAY}-${BUILD_ID} . --push" 
                                    }
                                }                                    
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/maip-gw-ctrl-api:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            },
                            "opa": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build --builder builder-3 -f docker/Dockerfile.opa $EXTAR_HOSTS --platform linux/arm64,linux/amd64 -t ${harbor}/${env.env}/opa:${env.TODAY}-${BUILD_ID} . --push"
                                    }
                                }
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/opa:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            },
                            "maip-gw-ctrl-wasm-uploader": {
                                retry(3) {
                                    timeout(time: 5, unit: 'MINUTES') {
                                      sh "export BUILDX_NO_DEFAULT_ATTESTATIONS=1 && docker buildx build --builder builder-4 -f docker/Dockerfile.uploader $EXTAR_HOSTS --platform linux/arm64,linux/amd64 -t ${harbor}/${env.env}/maip-gw-ctrl-wasm-uploader:${env.TODAY}-${BUILD_ID} . --push" 
                                    }
                                }
                                echo "==== 恭喜 ======> ${harbor}/${env.env}/maip-gw-ctrl-wasm-uploader:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                            }
                        )
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/gateway:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/controller:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/maip-gw-ctrl-api:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/opa:${env.TODAY}-${BUILD_ID} 已构建好推仓"
                        echo "==== 恭喜again ======> ${harbor}/${env.env}/maip-gw-ctrl-wasm-uploader:${env.TODAY}-${BUILD_ID} 已构建好推仓"                            
                    }
                }
            }
	    }
	}
	stage("helm dp"){
        when {
            anyOf {
                expression { params.CICD == 'cicd' }
                expression { params.CICD == 'only-cd' }
            }
        }
	    steps{
	        dir("${WORKSPACE}") {
	            script{
                    sh '''
                        cd helm_father/maip/ai-infra/k8s/install/charts/
                        rm -rf extra higress maip-gw-ctrl
                        cp -ra helm/* ./
                    '''
                    sh'''
                        cd helm_father/maip/ai-infra/k8s/
                        sed -i "s/harbor\\.maip\\.io/reg1\\.pa\\.zkj\\.com/g values.yaml"
                        sed -i -E "s/^([[:blank:]]*)sed:[^[:space:]]*/\\1sed: ${env.TODAY}-${BUILD_ID}/" values.yaml
                    '''
                }
	        }
            dir("${WORKSPACE}/helm_father/maip/ai-infra/k8s") {
                script{
                    if (params.CICD == 'cicd'){
                       if (params.ARCH == 'arm-xc'){
                          sh "kubectl apply -f install/charts/maip-gw-ctrl/crds/"
                          sh "helm --kubeconfig=/root/.kube/107arm-config upgrade ai-infra-install install --install --values values.yaml"
                          //sh "helm --kubeconfig=/root/.kube/107arm-config upgrade --install -n maip ${microservice} ./charts/${microservice} -f values.yaml"  
                       }else if (params.ARCH == 'x86 + arm'){
                          sh "kubectl apply -f install/charts/maip-gw-ctrl/crds/"
                          sh "helm --kubeconfig=/root/.kube/107arm-config upgrade ai-infra-install install --install --values values.yaml"
                          //sh "helm --kubeconfig=/root/.kube/45amd-config upgrade --install -n maip ${microservice} ./charts/${microservice} -f values.yaml"
                          //sh ""
                          echo "==========="
                       }
                    }else if (params.CICD == 'only-cd'){
                       if (params.ARCH == 'arm-xc'){
                          sh "kubectl apply -f install/charts/maip-gw-ctrl/crds/"
                          sh "helm --kubeconfig=/root/.kube/107arm-config upgrade ai-infra-install install --install --values values.yaml"
                          //sh "helm --kubeconfig=/root/.kube/107arm-config upgrade --install -n maip ${microservice} ./charts/${microservice} -f values.yaml"  
                       }else if (params.ARCH == 'x86 + arm'){
                          sh "kubectl apply -f install/charts/maip-gw-ctrl/crds/"
                          sh "helm --kubeconfig=/root/.kube/107arm-config upgrade ai-infra-install install --install --values values.yaml"
                          //sh "helm --kubeconfig=/root/.kube/45amd-config upgrade --install -n maip ${microservice} ./charts/${microservice} -f values.yaml"
                          //sh ""
                       }
                    }
                }                    
	        }
	    }
	}
	stage('Prepare for masshub') {
	    steps {
            script {
                // 定义要传递的变量
                //def lastjob_today = "${env.TODAY}"
                
                // 触发下游 Job 并传递参数
                build job: 'maashub', 
                      parameters: [
                          string(name: 'BRANCH_TAG', value: "${params.BRANCH_TAG}"),
                          string(name: 'TODAY', value: "${env.TODAY}"),
                          string(name: 'BUILD_NUMBER', value: "${env.BUILD_NUMBER}"),
                          string(name: 'ARCH', value: "${env.ARCH}"),
                          string(name: 'CICD', value: "${env.CICD}")
                      ],
                      wait: false
            }
	    }
    }
}
posted @ 2025-10-31 13:54  耿晓芳  阅读(4)  评论(0)    收藏  举报