通过 SEED 作业从同一个 repo 创建多个 Jenkins 作业

Create multiple Jenkins jobs from same repo via SEED job

我有一个包含多个 Jenkins 文件的存储库(至少会有多个 Jenkins 文件),我想使用 SEED 作业在 Jenkins 中设置作业。

到目前为止,我可以根据我的远程存储库设置一项工作。

#!/usr/bin/env groovy

/*
 * Setup jobs from gitlab project docker-jenkins-pipelines
 */
def createPipelineJob(final String repo) {

    String repoName = repo.substring(repo.lastIndexOf("/") + 1, repo.length())

    pipelineJob(repoName) {
        definition {
            cpsScm {
                scm {
                    git {
                        remote {
                            url('git@gitlab.com:' + repo +'.git')
                        }

                        branches('*/main')
                        //branches('*/feat*')
                    }
                }

                scriptPath("src/main/jobs/ADMIN-initialize-repository/Jenkinsfile")
            }
        }
    }
}

createPipelineJob('sommerfeld.sebastian/docker-jenkins-pipelines')

现在我想遍历我的存储库 (https://gitlab.com/sommerfeld.sebastian/docker-jenkins-pipelines/-/tree/main/src/main/jobs) 中的所有文件夹并为所有 Jenkins 文件创建单独的作业。

我想为 src/main/jobs/*/Jenkinsfile 使用某种通配符。但是循环文件夹也可以,而且 mybe 更好,因为我可以更好地定义作业名称。

但我不知道如何迭代文件夹。谁能给我一个关于如何做到这一点的提示?是否有 APi 要求 gitlab.com 之类的?

我建议不要使用 API。您手边确实有 groovy,您可以遍历这些文件。当您签出存储库时,您拥有所有信息。

是使用 groovy 遍历文件的良好起点,可能存在一些沙箱安全限制,但这展示了如何遍历一组文件。调用创建管道作业的方法应该类似于:

    new File(parentPath).traverse(type: groovy.io.FileType.FILES, nameFilter: ~/Jenkinsfile/) { it ->
        createPipelineJob("sommerfeld.sebastian/docker-jenkins-pipelines/${it.parent.name}")
    } //code untested :)