小编das*_*ker的帖子

Job DSL插件与管道插件

Job DSL PluginPipeline Plugin之间的主要区别是什么?

  1. 两者都为程序化创造就业提供了方法
  2. 哪个是最好的,因为前进,为什么?
  3. 如果两者具有相似的功能,它们是否有不同的用例?
  4. 由于Jenkins 2.0专注于Pipelines作为代码,这是否意味着job-dsl没有未来或者Pipeline Plugin是Job DSL插件的下一步?

jenkins jenkins-plugins jenkins-job-dsl

56
推荐指数
2
解决办法
2万
查看次数

如何将 Jenkinsfile 拆分为子文件(“包含”)?

我们的 Jenkinsfile 不断增长,并达到了\xe2\x80\x99 难以跟踪所有内容的程度。我们想将 \xe2\x80\x9csplit\xe2\x80\x9d 的一些部分放入它们自己的子文件中(请参阅 \xe2\x80\x9cinclude for make\xe2\x80\x9d https://www.gnu.org/例如software/make/manual/html_node/Include.html )。

\n\n

在寻找解决方案时, \xe2\x80\x9csharedlibraries\xe2\x80\x9d https://jenkins.io/doc/book/pipeline/shared-libraries/不断出现。\xe2\x80\x99 基本上就是我想要的,但它似乎解决了一个不同的问题(在不同的 Jenkinsfile 之间提供通用/共享功能),并且还增加了很多复杂性(额外的 git 存储库)。我们\xe2\x80\x99 只是在寻找一种方法,通过将一个大 Jenkinsfile 拆分为多个较小的文件来降低其复杂性。

\n\n

我是否在研究中监督了解决方案?或者目前是否没有解决方案可以将 Jenkinsfile 中的任务/阶段/功能管理到同一存储库中的单独模块中?

\n

jenkins jenkins-pipeline

8
推荐指数
0
解决办法
1593
查看次数

在整个管道中分多个阶段解开藏匿处

我在我的管道中使用 stash\unstash,想知道你能在多个阶段 unstash 吗?

例如:

stage('One') {
  steps {
    echo 'Stage one...'
    stash includes: 'dist/**/*', name: 'builtSources'
    dir('/some-dir/deploy') {
      unstash 'builtSources'
    }
  }
}
stage('Two') {
  steps {
    echo 'Stage two...'
    node('OtherNode') {
      dir('/some-other-dir/deploy') {
        unstash 'builtSources'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

那么我可以在以下任何一个阶段中多次检索在早期阶段制作的藏品吗?

jenkins jenkins-plugins jenkins-pipeline

7
推荐指数
1
解决办法
4055
查看次数

jenkins管道中的recipientProviders总是空的

完成工作后,我想发送电子邮件通知.如果至少RequesterRecipientProvider在触发构建的用户填充时手动触发作业.我从gitlab push webhook触发,在任何recipientProviders中都没有配置电子邮件地址.

    emailext (
      mimeType: 'text/html',
      replyTo: '$DEFAULT_REPLYTO', 
      subject: subject,
      body: details,
      to: requester,
      recipientProviders: [[$class: 'CulpritsRecipientProvider'],
                         [$class: 'RequesterRecipientProvider'],
                         [$class: 'DevelopersRecipientProvider'],
                         [$class: 'FailingTestSuspectsRecipientProvider'             ], 
                         [$class: 'FirstFailingBuildSuspectsRecipientProvider']
                        ]
        )
Run Code Online (Sandbox Code Playgroud)

知道什么时候这些recipientProvider被填满?email-ext从哪里获取收件人列表?

jenkins email-ext jenkins-pipeline

7
推荐指数
1
解决办法
821
查看次数

Jenkins管道执行闭包(如"并行"步骤)

我有一个非常漫长而复杂的管道,我在重大jenkins升级后重写.

我想要的是将我的阶段声明为变量,然后在主节点体中执行它们:我可以轻松地为并行阶段执行此操作,但我希望对顺序阶段也有相同的样式.

经过大量的测试,我发现做这项工作的唯一方法是在所有单个连续阶段(丑陋)周围使用"假"并行调用,我确信有更好的解决方案,但似乎我找不到合适的一步......对我感到羞耻.

这是我的例子:

stage1 = { stage("one") {
            println "stage one"
         } }

stage2 = { stage("two") {
            println "stage two"
         } }

stage3 = { stage("three") {
            println "stage three"
         } }

node {
    parallel (
        "one" : stage1 ,
        "two" : stage2
    )
    HERE I WANT TO CALL stage3 Closure, possibly giving a map like in the parallel above
}
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-pipeline

7
推荐指数
1
解决办法
523
查看次数

你如何使用 Jenkins libraryResource 从资源中读取文件?

我无法libraryResource使用 Jenkins 加载资源。我发现了很多人libraryResource用来加载资源的例子,但没有人遇到我遇到的特定错误,所以我认为我错过了一些东西,但我不知道那可能是什么。

我正在尝试加载一个几乎所有作业都会重用的 python 脚本。我已经放置了一个简单的测试脚本,resouces/org/foo/test.py据我所知,我应该能够阅读使用:

libraryResource('org/foo/test.py')
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

hudson.AbortException: 找不到这样的库资源 org/foo/test.py。

我使用从 SCM 加载的管道脚本,该脚本在 jenkins 的项目配置中配置。这是从中加载管道脚本的 git 存储库的结构。

-src
  -org
    -shared
      +Utilities.groovy
-jobs
  -nighly
    +nightly.groovy
-resources
  -org
   -foo
    +test.py
Run Code Online (Sandbox Code Playgroud)

Utitilies.groovy在 nightly.groovy 的根目录加载using 共享库

libraryResource('org/foo/test.py')
Run Code Online (Sandbox Code Playgroud)

我试过的:

  • 运行libraryResource阶段外,在阶段和节点
  • scm运行前检查libraryResource
  • 不同的路径foo/test.pyresources/org/foo/test.py

根据 checkout scm 的输出,resources/org/foo/test.py正在获取包含的最新提交,它位于代理的作业根目录中。

我没有想法,我感谢您提供的任何帮助/建议。我真的很想避免将这个脚本提交给所有使用它的项目,因为它只被 Jenkins 使用。

jenkins jenkins-pipeline

7
推荐指数
1
解决办法
1万
查看次数

如何动态地将credentialsId传递给Jenkins管道

有没有办法使用环境变量在 withCredentials 块内的 Jenkins 管道中动态传递凭据 ID?

目前这有效:

withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', credentialsId: 'my-aws-credentials',
                        ACCESS_KEY: 'ACCESS_KEY', SECRET_KEY: 'SECRET_KEY']]) { }
Run Code Online (Sandbox Code Playgroud)

但这不会:

withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', credentialsId: '${AWS_CREDENTIAL_ID}',
                        ACCESS_KEY: 'ACCESS_KEY', SECRET_KEY: 'SECRET_KEY']]) { }
Run Code Online (Sandbox Code Playgroud)

我应该补充一点,构建在 docker 容器中运行,但其他环境变量工作正常,所以我希望这个也能工作。

groovy jenkins jenkins-plugins jenkins-pipeline

6
推荐指数
1
解决办法
9348
查看次数

有没有一种简单的方法可以将现有的Jenkins自由式作业转换为New Jenkins 2.x管道视图

我在我的旧Jenkins实例中有大量现有的Freestyle Jenkins作业,现在我想使用Jenkins文件将它们迁移到New Jenkins 2.0管道作业.

我按照此页面创建了一个Jenkins文件:https://jenkins.io/doc/book/pipeline/jenkinsfile/

有人可以建议我,如果有任何简单的方法(或)插件,我可以用来将这些现有的工作转换为管道视图.

groovy jenkins jenkins-pipeline jenkins-2

6
推荐指数
1
解决办法
2028
查看次数

凡放在Jenkinsfile的try / catch

在哪里放置try / catch,使其可以按预期工作,特别是在存在并行分支的情况下工作?(此外,还有蓝海插件)

在有关Jenkinsfile的官方文档中,该主题没有任何明确内容,但是确实存在示例:

示例1:尝试在阶段块内

Jenkinsfile (Scripted Pipeline)
node {
stage('Example') {  //It's inside the stage block
    try {
        sh 'exit 1'
    }
    catch (exc) {
        echo 'Something failed, I should sound the klaxons!'
        throw
    }
}
}
Run Code Online (Sandbox Code Playgroud)

示例2:尝试在节点块内部

Jenkinsfile (Scripted Pipeline)
stage('Build') {
    /* .. snip .. */
}

stage('Test') {
    parallel linux: {
        node('linux') {
            checkout scm
            try {
                unstash 'app'
                sh 'make check'
            }
            finally {
                junit '**/target/*.xml'
            }
        }
    },
    windows: {
        node('windows') {
            /* .. …
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-pipeline

5
推荐指数
1
解决办法
2822
查看次数

Jenkins Pipeline Stash可以合并文件吗?

我正在并行处理integrationunit测试。它们都在target目录下生成JUnit和代码覆盖率报告。它们每个的存储名称是,tests-build并且还提供了所包含的资源。

stage('Tests Execution') {
  parallel {
    stage('Execute Unit Tests') {
      steps {
        dockerExecuteBuildStage([ stageName: "unit-tests", dockerTargetDir: "/opt/build/target",
            stashIncludesPattern: "**/target/*", stashName: "tests-build"])
      }
    }

    stage('Execute Integration Tests') {
      when {
        expression { config.load().idpsIsEnabled == false }
      }
      steps {
        script {
          config.concurrentStash("tests-build", "intuit-paas-update.yml")
        }
        dockerExecuteBuildStage([ stageName: "integration-tests", dockerTargetDir: "/opt/build/target",
            stashIncludesPattern: "**/target/*", stashName: "tests-build"])
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

考虑到它们将并行执行,并将用于Jenkins Stash临时存储报告以供以后处理,因此出现以下行为:

问题

  • 并行执行时可以隐藏文件吗?
  • 有没有一种方法可以合并来自2个并行存储的文件?如果名字不冲突?

行为

  • 在一个分支 Safe stashing paas-update.yml in faf7dfb5d4a66b14d5acdae4c46a8b8771b57beb-tests-build...
  • 在另一个分支,我得到了 Warning: …

jenkins jenkins-pipeline

5
推荐指数
0
解决办法
573
查看次数