「JENKINS-PIPELINE」- 接口 | SDK

通过 Jenkins Java API 来配置 Job 的方法是观察 config.xml 的结构,然后根据解构来查看 Javadoc 文档,并进一步编写代码。

RunWrapper | currentBuild and previousBuild

org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper
https://javadoc.jenkins.io/plugin/workflow-support/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.html

getBuildVariables() // 获取环境变量,但是该 Map 为 Java Map 类型,其不支持 get(”,default) 操作。

jenkins.model.Jenkins

https://github.com/jenkinsci/jenkins/blob/jenkins-2.31/core/src/main/java/jenkins/model/Jenkins.java#L1761

https://javadoc.jenkins-ci.org/jenkins/model/Jenkins.html

getItem()
getItems() // Gets just the immediate children of Jenkins.
getAllItems()

Multibranch Pipeline

jenkins.model.Jenkins
https://javadoc.jenkins.io/jenkins/model/Jenkins.html

jenkins.plugins.git.GitSCMSource
https://javadoc.jenkins.io/plugin/git/jenkins/plugins/git/GitSCMSource.html

jenkins.branch.BranchSource
https://javadoc.jenkins.io/plugin/branch-api/jenkins/branch/BranchSource.html

jenkins.branch.MultiBranchProject
https://javadoc.jenkins.io/plugin/branch-api/jenkins/branch/MultiBranchProject.html

org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject
https://javadoc.jenkins.io/plugin/workflow-multibranch/org/jenkinsci/plugins/workflow/multibranch/WorkflowMultiBranchProject.html

创建多分支流水

Manage Jenkins Using Script Console | by Nilkumar Shah | Globant | Medium

def jenkinsInstance = hudson.model.Hudson.instance
def multibranchJob = new org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject(jobsParentFolder, projectId);

// 显示名称
String pathWithNamespace = project.getPathWithNamespace()
multibranchJob.setDisplayName("${projectId}~${pathWithNamespace}")

// 代码仓库
def gitScmSource = new jenkins.plugins.git.GitSCMSource(project.getHttpUrlToRepo())
gitScmSource.setCredentialsId('gitlab-team-opbot-username-password')
gitScmSource.setTraits([
    new jenkins.plugins.git.traits.BranchDiscoveryTrait(),
    new jenkins.plugins.git.traits.TagDiscoveryTrait()
])
def gitBranchSource = new jenkins.branch.BranchSource(gitScmSource)
def gitBranchSourceList = [gitBranchSource]
multibranchJob.setSourcesList(gitBranchSourceList)

multibranchJob.save()
jenkinsInstance.reload()

我们担心频繁的 reload() 操作会对 Jenkins 产生影响,所以我们实用 createProject 进行创建:

def jenkinsInstance = jenkins.model.Jenkins.instance
def parentItem = jenkinsInstance.getItem("Jenkins-Managed-Jobs")

def multibranchJob = parentItem.createProject(org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject, projectId)
String pathWithNamespace = project.getPathWithNamespace()
multibranchJob.setDisplayName("${projectId}~${pathWithNamespace}")
def gitScmSource = new jenkins.plugins.git.GitSCMSource(project.getHttpUrlToRepo())
gitScmSource.setCredentialsId('gitlab-team-opbot-username-password')
gitScmSource.setTraits([
    new jenkins.plugins.git.traits.BranchDiscoveryTrait(),
    new jenkins.plugins.git.traits.TagDiscoveryTrait()
])
def gitBranchSource = new jenkins.branch.BranchSource(gitScmSource)
def gitBranchSourceList = [gitBranchSource]
multibranchJob.setSourcesList(gitBranchSourceList)
multibranchJob.save()

设置 Job 属性

org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject

jenkins.plugins.git.GitSCMSource
jenkins.branch.NoTriggerBranchProperty
jenkins.branch.DefaultBranchPropertyStrategy

Agent

Manage Jenkins Using Script Console | by Nilkumar Shah | Globant | Medium

import hudson.model.*
import hudson.slaves.*

// Define agent parameters
def agentName = "YourAgentName"
def agentDescription = "Your agent description"
def remoteFS = "/path/to/agent/workspace"
def labels = "linux docker"
def numExecutors = 2

// Create a new agent
def agent = new DumbSlave(
    agentName,
    "",
    remoteFS,
    numExecutors,
    Node.Mode.NORMAL,
    labels,
    new JNLPLauncher(),
    new RetentionStrategy.Always(),
    new ArrayList<NodeProperty<Node>>()
)

// Add agent to Jenkins
Jenkins.instance.addNode(agent)

// Print agent creation success message
println("Jenkins agent '$agentName' added successfully.")

案例

通过 Jenkins Script 来进行批量操作;
peterjenkins1/jenkins-scripts: Useful groovy scripts for configuring Jenkins via Ansible

create a jenkins job in the script console

Script Console
https://www.jenkins.io/doc/book/managing/script-console/

创建 Job

configuration – Configure or Create hudson job automatically – Stack Overflow

def jenkins = hudson.model.Hudson.instance
def template = jenkins.getItem("MyTemplate")
def job = jenkins.copy(template,"MyNewJob")
job.scm = new hudson.scm.SubversionSCM("http://base/branches/mybranche")
job.save()

How do I create a new project in Jenkins using Groovy – Stack Overflow

//Get instance of Jenkins
def parent = Jenkins.getInstance()

//Define a job name
def jobName = "Job"

//Instantiate a new project
def project = new FreeStyleProject(parent, jobName);

//Set a description for the project
project.setDescription("Just a placeholder for a description")

//Create a parameter for the project
def parameterDefinitions = new ArrayList<ParameterDefinition>();
def name = "ParameterOne"
def defaultValue = "1"
def description = "Just a placeholder for a parameter description"
parameterDefinitions.add(new StringParameterDefinition(name, defaultValue, description) )

//Create a job property for the project
def jobProperty = new ParametersDefinitionProperty(parameterDefinitions);

//Adding and saving the job property to the project
project.addProperty(jobProperty)
project.save()

补充说明

在网页中,创建 Item 时,在浏览器中检查元素,查看 HTTP 请求,以此获得相关资源类。