【问题标题】:Can this MultiBranch Pipeline Groovy Snippet for the Jenkins Script Console beoptimized?这个用于 Jenkins 脚本控制台的 MultiBranch Pipeline Groovy Snippet 可以优化吗?
【发布时间】:2017-07-23 14:17:27
【问题描述】:

我需要一个在 Jenkins 2.* 脚本控制台中生成 MultiBranch Pipeline 项目的 groovy 代码 sn-p。在InterWeb上没有找到,所以我自己做的。最终,我通过将不同的代码片段粘合在一起来实现它。 我想知道一个 groovy 大师是否可以帮助我优化它并使它更漂亮? :-)

我的进一步计划:如果我不必手动输入 git repo 就好了。扫描一个 git 组织中的所有 repos 会很好。

import jenkins.model.Jenkins
import jenkins.plugins.git.*
import hudson.triggers.*
import com.cloudbees.hudson.plugins.folder.Folder
import org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject
import jenkins.branch.BranchProperty
import jenkins.branch.BranchSource
import jenkins.branch.DefaultBranchPropertyStrategy
import org.jenkinsci.plugins.workflow.libs.*

def parent = Jenkins.instance
println "parent: $parent"

// create folder
Folder folder = Jenkins.instance.getItemByFullName('poc')
if (folder == null) {
  folder = parent.createProject(Folder.class, "poc")
  folder.displayName = "P.O.C Jobs"
  folder.getProperties().add(
    new FolderLibraries(
      Collections.singletonList(
        new LibraryConfiguration(
          "pipelinejunit", 
          new SCMSourceRetriever(
            new GitSCMSource(
              null, 
              "ssh://git@servix/extra/git/poc_junit.git", 
              "local_git", 
              "*", 
              "", 
              true)
          )
        )
      )
    )
  )
}
println "folder: $folder"

WorkflowMultiBranchProject mbp = Jenkins.instance.getItemByFullName('p_junit-lib_mb')
if (mbp != null) {
  mbp.delete()
}
mbp = folder.createProject(WorkflowMultiBranchProject.class, "p_junit-lib_mb")
mbp.displayName = "Junit Library [build/test *]"
mbp.getSourcesList().add(new BranchSource(new GitSCMSource(null, "ssh://git@servix/extra/git/poc_junit.git", "local_git", "*", "", false), new DefaultBranchPropertyStrategy(new BranchProperty[0])));
mbp.scheduleBuild2(0).getFuture().get()
println "mbp: $mbp"

def job
while (/* do */ {
  Thread.sleep(10)
  job = mbp.getItem('master')
  (job == null)
}());

println "job master: $job"
job.displayName = "Branch: master"
job = mbp.getItem('development')
println "job development: $job"
job.displayName = "Branch: development"

// reload jobs
parent.reload()

【问题讨论】:

    标签: optimization jenkins groovy


    【解决方案1】:

    我的进一步计划:如果我不必手动输入 git 回购。扫描一个 git 组织中的所有 repos 会很好。

    我认为你想要的已经被非常流行的Github Branch Source Plugin 实现了。来自docs:“GitHub 分支源插件允许您基于来自一个或多个 GitHub 用户或组织的存储库结构创建一个新项目。您可以:1) 将所有或部分存储库作为作业导入到来自 GitHub 用户或组织的工作区或 2) 将单个存储库的分支导入为来自 GitHub 用户或组织的作业。”如果您不使用 github 或 bitbucket,您将无法使用这些很棒的插件,但希望您可以使用。 :)

    【讨论】:

    • 好的,谢谢,我明白了,因为我使用我的本地家庭服务器和一个裸露的 ssh git 设置,所以我必须使用我最初的想法和某种 ssh shell/groovy 魔法(做repos 的远程 ls,在 repo 中查找 Jenkinsfile,然后使用我的代码进行项目生成)。嗯,不是很好,但是我想要一个简单的本地设置,所以这就是我要做的...无论如何感谢您的帮助和提示,我肯定会在我们使用 github 的工作中使用它...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    相关资源
    最近更新 更多