当前位置: 首页 > 知识库问答 >
问题:

Jenkins作业DSL -管道阶段

张权
2023-03-14

我正在编写一个Groovy脚本,其中包含部署terraform的作业。我正在使用作业DSL并使种子作业由JCasC实现,一切正常。然后我有一个包含作业的Groovy文件的存储库。

如果我将Groovy文件保持为单个作业,它就可以正常工作。

然而,我希望能够构建具有构建阶段的管道。我知道我可以把管道写在詹金斯文件中

我有这个作为开始:

pipelineJob('Deploy-K8s-Cluster') {
  definition {
    cps {
      script('''
        pipeline {
          agent any
            stages {
              stage('Checkout'){
                steps {
                  scm {
                    git {
                      branch('master')
                      remote {
                        url 'jenkins@bitbucket.org:jjbbtt/aws-infrastructure.git'
                        credentials('bitbucket-ssh')
                      }
                    }
                  }
                }
              }
              stage('Terraform Initialize') {
                steps {
                  'terraform init'
                }
              }
              stage('Terraform Plan') {
                steps{
                  'terraform plan -out=create.tfplan'
                }
              }
              stage('Terraform Apply') {
                steps{
                  'terraform apply -auto-approve create.tfplan'
                }
              }
              stage('Deploy Sealed Secrets Controller') {
                steps{
                  'kubectl apply -f sealed-secrets/controller.yaml'
                }
              }
            }
        }
      '''.stripIndent())
      sandbox()
    }
  }
}

但是,我看到了这个错误:

General error during semantic analysis: There's no @DataBoundConstructor on any constructor of class javaposse.jobdsl.plugin.casc.FromUrlScriptSource

我已经尝试了各种方法,并阅读了一堆文档…但问题是我不太熟悉工作DSL。

我错过了什么简单的东西吗?还是完全找错了人?

共有1个答案

司寇山
2023-03-14

我想明白了…我的误解是没有看到cps的script()部分中的任何内容不是Job DSL。如果我更改语法,就可以工作。

 类似资料:
  • 是否有可能通过一个作业DSL创建多分支管道作业,该作业通过“管道脚本”而不是每个Git存储库包含的Jenkinsfile来定义作业? 我们希望避免在100个Git存储库中生成和维护相同的Jenkins文件(除了一些参数)。 目前,我们正在使用管道作业和工厂作业播种的作业DSL,但目前我们在多分支构建(功能分支)方面受到限制。因此,我们希望切换到多分支管道作业,但在播种方面我们受到了限制。 我知道我

  • 我试图从流水线步骤中运行一个job-dsl脚本。一般来说,这应该是可能的,正如这里所描述的,在管道步骤中添加了以下代码片段: null 我如何知道脚本的真实位置,以及如何指定一个jobDsl作为目标,它本身位于不同的repo中?还是我完全走错了方向? 编辑 经过进一步的研究,共享库存储库被签出到“真实”工作区旁边的一个目录中,后缀为@libs,这似乎是事实。所以我认为使用以下方法是个好主意: 与此

  • 我正在使用jenkins job DSL插件创建一个jenkins pipeline作业来播种作业。如何获得DSL文件中的工作空间路径?詹金斯管道代码是这样的: 失败的 DSL 代码是: 出现错误: 在管道区域中创建的变量在作业DSL步骤中不可访问

  • 我试图使用Jenkins DSL groovy来创建Jenkins工作。我对Git参数使用的方法,很少有参数无法识别,并出现以下错误。 方法:javaposse.jobdsl.dsl.helpers.gitParamContext.SelectedValue()的签名不适用于参数类型:(java.lang.String)值:[NONE] 方法:javaposse.jobdsl.dsl.helper

  • 问题内容: 我想在管道作业中使用EnvInject插件。因此,我可以设置复选框“为运行准备一个环境”,但是 没有动作“注入环境变量”,就像在自由式作业中一样。我在“属性内容”块中声明了变量:在此处输入图片说明 如何使用EnvInject在管道作业中注​​入环境变量? 问题答案: 如果在“属性内容”块中声明了以下变量: 然后,您可以将它们放入管道中,以便:

  • null null 我怎样才能想象这些工作类型之间的关系?还有其他插件支持这些类型吗?