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