Jenkins根据repo中的Jenkinsfile在GUI中自动添加作业

h6my8fg2  于 2023-01-08  发布在  Jenkins
关注(0)|答案(1)|浏览(155)

我的管道都在一个比特桶里。

├── shared_libs
(...)
├── pipelines
│   ├── group1
│   │   ├── pipelineA
│   │   │   └── Jenkinsfile
│   │   ├── pipelineB
│   │   │   └── Jenkinsfile
│   ├── group2
│   │   ├── pipelineD
│   │   │   └── Jenkinsfile
│   │   ├── pipelineC
│   │   │   └── Jenkinsfile

到目前为止,我在GUI中手动创建作业,配置所有参数、repo、Jenkinsfile路径。现在我很难找到一个插件,一种自动化的方法。设置repo访问后的自动发现。它将基于Jenkinsfile创建一个作业,将其放在文件夹结构中的正确位置,设置所有参数。有点像共享库。在这里我指定repo、路径、钥匙。它可以使用了。
因为这些管道不仅仅是构建和部署,而是所有的管理/清理工作...我不想自动运行它们。我只想在GUI中自动添加元素,一旦它被推到repo/合并到master。

3npbholx

3npbholx1#

是的,你可以自动化这个过程。如果不知道所有的细节,很难给予一个完整的解决方案。但是这里是你可以做到这一点的方法。
您可以创建一个新的Jenkins作业,该作业将由Bitbucket存储库中的Webhook触发。Webhook请求将传输最新更改的文件等。从请求中,您可以提取添加或更改的文件。基于此信息,您可以使用以下Groovy脚本创建新作业,并将其移动到所需的目录。

def createJenkinsJob(def jobName, def folderName) {

    echo "Creating the job ${jobName}"
  // Here I'm using a shared library in the pipeline, so I have loaded my shared library here
  // You can simply have the entire pipeline syntax here.
    def jobDSL="@Library('ycr@master') _\n" +
                "Pipeline()"
    def flowDefinition = new org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition(jobDSL, true)
    def jenkins = Jenkins.instance
    def job = new org.jenkinsci.plugins.workflow.job.WorkflowJob(instance, jobName )
    job.definition = flowDefinition
    job.setConcurrentBuild(false)

    job.save()
    jenkins.reload()
    
    // After creating the Job move the job to a folder
    if (folderName != null && folderName != "") {
        def folder = jenkins.getItemByFullName(folderName)
        Items.move(job, folder)
    }  
}

相关问题