1

我想在 Repo A 中保留 jenkins 管道代理(kubernetes pod)模板。jenkinsfile 在 Repo B 中。要在 Repo B 上运行阶段“ci”,我需要从 Repo A 签出代理文件夹。

pipeline {
  agent none
  stages {
    stage('ci') {
      agent {
        kubernetes {
          yamlFile "agents/ci.yaml"
        }
      }
      steps {
      }
    }
    stage('staging deploy') {
      agent {
        kubernetes {
          yamlFile "agents/stage-deploy.yaml"
        }
      }
      steps {
      }
    }
  }
}

当我运行 jenkins 管道作业时,它会检查 Repo B(分支名称 = 开发)。但我无法签出 Repo A (branch name = master) 来获取代理模板。这里的任何帮助都会很棒。我一直在努力解决这个问题。

4

1 回答 1

0

您需要先使用 pod 模板提取 repo,然后引用所需 yaml 文件的内容。第一阶段需要在主节点上执行。

这是管道的示例:

def currentLabel = "${UUID.randomUUID().toString()}"
def podTemplate 

pipeline {
  agent any

  stages {
    stage('Checkout pod templates') {
      agent {
        label 'master'
      }
      steps {
        sh "mkdir podTemplates"

        dir("podTemplates") {
          git branch: "master",
          url: "git@github.com/your-pod-templates.git",
          credentialsId: "$REPO_CREDS"
        }
        script {
            podTemplate = new File("${WORKSPACE}/podTemplates/pod-template.yml").text
        }
      }
    }


    stage('Second stage') {
        agent {
          kubernetes {
            label currentLabel
            defaultContainer 'jnlp'
            yaml podTemplate
          }
        }  

        steps {
            script {
                ...
                do something here
                ...
            }
        }
    }

  }
}

我认为您可以根据需要创建尽可能多的 podTemplate 变量。

于 2021-10-19T10:00:49.690 回答