我们的 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我在我的管道中使用 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)
那么我可以在以下任何一个阶段中多次检索在早期阶段制作的藏品吗?
完成工作后,我想发送电子邮件通知.如果至少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升级后重写.
我想要的是将我的阶段声明为变量,然后在主节点体中执行它们:我可以轻松地为并行阶段执行此操作,但我希望对顺序阶段也有相同的样式.
经过大量的测试,我发现做这项工作的唯一方法是在所有单个连续阶段(丑陋)周围使用"假"并行调用,我确信有更好的解决方案,但似乎我找不到合适的一步......对我感到羞耻.
这是我的例子:
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) 我无法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运行前检查libraryResourcefoo/test.py,resources/org/foo/test.py根据 checkout scm 的输出,resources/org/foo/test.py正在获取包含的最新提交,它位于代理的作业根目录中。
我没有想法,我感谢您提供的任何帮助/建议。我真的很想避免将这个脚本提交给所有使用它的项目,因为它只被 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 容器中运行,但其他环境变量工作正常,所以我希望这个也能工作。
我在我的旧Jenkins实例中有大量现有的Freestyle Jenkins作业,现在我想使用Jenkins文件将它们迁移到New Jenkins 2.0管道作业.
我按照此页面创建了一个Jenkins文件:https://jenkins.io/doc/book/pipeline/jenkinsfile/
有人可以建议我,如果有任何简单的方法(或)插件,我可以用来将这些现有的工作转换为管道视图.
在哪里放置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) 我正在并行处理integration和unit测试。它们都在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临时存储报告以供以后处理,因此出现以下行为:
Safe stashing paas-update.yml in faf7dfb5d4a66b14d5acdae4c46a8b8771b57beb-tests-build...Warning: …