You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins动态阶段实现独立Kaniko Agent执行构建的求助

环境配置

  • Kubernetes v1.27 (EKS)
  • 通过helm chart安装Jenkins
  • 使用shared libraries通过代码配置Jenkins(CaaC)

Jenkins共享库配置

所有文件位于var目录下

pipelineTemplate.groovy

#!/usr/bin/env groovy

def call() {
  pipeline {
    agent {
      kubernetes {
         yaml kaniko()
      }
     }

    stages {
      stage ('1. Build') {
        steps {
          kanikoBuild()
        }
      }
    }
  }
}

kaniko.groovy

#!/usr/bin/env groovy

def call(){
agent =  """
  apiVersion: v1
  kind: Pod
  metadata:
    labels:
      role: agent
    name: jenkins-build
    namespace: jenkins
  spec:
    serviceAccountName: jenkins-agent
    imagePullSecrets:
    - name: kaniko-docker
    containers:
    - name: kaniko
      image: gcr.io/kaniko-project/executor:v1.10.0-debug
      imagePullPolicy: Always
      command:
      - /busybox/cat
      tty: true
      volumeMounts:
      - name: kaniko-docker
        mountPath: /kaniko/.docker
      resources:
        requests:
          cpu: 3
          memory: 5Gi
    restartPolicy: Never
    volumes:
    - name: kaniko-docker
      projected:
        sources:
        - secret:
            name: kaniko-docker
            items:
              - key: .dockerconfigjson
                path: config.json
"""
return agent
}

kanikoBuild.groovy

#!/usr/bin/env groovy

def generateStage(job) {
  return {
    stage("Build ${job}") {
      sh """
        executor \
        -f `pwd`/Dockerfile-${job} \
        -c `pwd` \
        --cache=true \
        --cache-repo=mydocker/${job} \
        --destination=mydocker/${job}:${env.GIT_COMMIT}
      """
    }
  }
}

def call() {
  container('kaniko') {
    def stagesList = [:]
    def parallelStagesMap = ''
  
    stagesList = [
      "app1",
      "app2"
    ]

    parallelStagesMap = stagesList.collectEntries {["${it}" : generateStage(it)]}
                
    parallelStagesMap.failFast = false
    parallel parallelStagesMap
  }
}

当前正常功能

向stagesList添加新项时,会动态创建新的阶段,只需更新一处即可,无需重复复制Kaniko执行器代码,十分便捷。

存在的问题

由于Kaniko设计为单个Pod仅能运行一个执行器,当前流水线因并行阶段共用同一个Kaniko Pod而失败;此外,无法为不同应用配置差异化资源(如app1需5CPU、app2需2CPU)。

期望实现目标

希望每个动态生成的流水线阶段能运行在独立的执行器上,即stagesList中定义的每个应用都启动独立的Kaniko Pod来执行构建。

曾尝试在generateStage函数中添加Pod定义,但未成功。

恳请各位提供帮助。

内容的提问来源于stack exchange,提问作者Michał Lewndowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:18:09