如何通过Groovy脚本在Jenkins中创建指定Pipeline流水线
解决方案
你可以直接在原有初始化Groovy脚本的基础上追加Pipeline创建逻辑,直接调用Jenkins内置API完成Pipeline任务的创建,无需额外手动操作。
前置依赖
请确保Jenkins实例已经预先安装以下Pipeline必备插件,再执行脚本:
- workflow-job
- workflow-cps
- pipeline-model-definition(支持声明式Pipeline语法)
完整整合脚本
#!groovy import hudson.security.* import jenkins.model.* import hudson.util.*; import jenkins.install.*; import jenkins.model.Jenkins import jenkins.model.JenkinsLocationConfiguration // 导入Pipeline相关类 import workflow.job.WorkflowJob import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition // parameters def jenkinsParameters = [ email: '{{ jenkins_username_name }} <{{ jenkins_username_email }}>', url: '{{ jenkins_tls_url }}' ] // get Jenkins location configuration def jenkinsLocationConfiguration = JenkinsLocationConfiguration.get() // set Jenkins URL jenkinsLocationConfiguration.setUrl(jenkinsParameters.url) // set Jenkins admin email address jenkinsLocationConfiguration.setAdminAddress(jenkinsParameters.email) def instance = Jenkins.getInstance() def hudsonRealm = new HudsonPrivateSecurityRealm(false) hudsonRealm.createAccount('{{ jenkins_admin_username }}', '{{ jenkins_admin_password }}') instance.setSecurityRealm(hudsonRealm) instance.setInstallState(InstallState.INITIAL_SETUP_COMPLETED) // ------------------- 新增Pipeline创建逻辑 ------------------- // 定义Pipeline任务名称 def pipelineName = "bees-buzz-pipeline" // 检查任务是否已存在,避免重复创建报错 if (!instance.getItem(pipelineName)) { // 创建Pipeline类型任务 WorkflowJob pipelineJob = instance.createProject(WorkflowJob.class, pipelineName) // 填入你的Jenkinsfile内容 def jenkinsfileContent = '''pipeline { agent any stages { stage('Buzz Buzz') { steps { echo 'Bees Buzz!' } } stage('Bees Bees Bees') { steps { echo 'Buzz, Bees, Buzz!' echo 'Bees Buzzing!' } } } }''' // 配置Pipeline定义,第二个参数设为false代表禁止页面修改脚本,需可编辑改为true即可 pipelineJob.setDefinition(new CpsFlowDefinition(jenkinsfileContent, false)) pipelineJob.save() } // ------------------- Pipeline创建逻辑结束 ------------------- jenkinsLocationConfiguration.save() instance.save()
配置说明
- 你可以修改
pipelineName变量的值自定义生成的Pipeline任务名称 CpsFlowDefinition的第二个布尔参数控制该Pipeline脚本是否允许在Jenkins Web端修改,设置为true时用户可以在页面上直接编辑Jenkinsfile内容,设置为false时仅能通过脚本更新- 如果需要从外部文件加载Jenkinsfile,只需要把
jenkinsfileContent变量替换为读取本地文件的逻辑即可
内容的提问来源于stack exchange,提问作者Kaguei Nakueka
相关产品推荐
相关产品推荐

