Nat*_*han 6 jenkins jenkins-pipeline
我有几个管道作业,它们的配置非常相似。它们都具有相同的阶段(其中大约有 10 个)。
我现在正在考虑转向声明式管道(https://jenkins.io/blog/2016/09/19/blueocean-beta-declarative-pipeline-pipeline-editor/)。
但我不想在每个管道中定义 ~10 个阶段。我想在一个地方定义它们,并以某种方式“导入”它们。
声明式管道是否可以做到这一点?我看到有库,但似乎我不能使用它们来包含阶段定义。
您必须创建一个共享库来实现我将要建议的内容。对于共享库的实现,您可以查看以下帖子:
\n\n\n\n将 Jenkins 输入步骤中的文件上传到工作区(主要用于图像,以便可以轻松弄清楚事情)
\n\n现在,如果您想使用可以在多个项目(作业)中重用的Jenkinsfile(一种模板) ,那么这确实是可能的。
\n\n创建包含目录的共享库存储库后vars,您只需在目录中创建一个 Groovy 文件(比方说,commonPipeline.groovy)vars。
这是一个有效的示例,因为我之前在多个工作中使用过它。
\n\n$ cat shared-lib/vars/commonPipeline.groovy\n\n// You can create function(s) as shown below, if required\ndef someFunctionA() {\n // Your code\n}\n\n// This is where you will define all the stages that you want\n// to run as a whole in multiple projects (jobs)\ndef call(Map config) {\n pipeline {\n agent {\n node { label \'slaveA || slaveB\' }\n }\n\n environment {\n myvar_Y = \'apple\'\n myvar_Z = \'orange\'\n }\n\n stages {\n stage(\'Checkout\') {\n steps {\n deleteDir()\n checkout scm\n }\n }\n\n stage (\'Build\') {\n steps {\n script {\n check_something = someFunctionA()\n\n if (check_something) {\n echo "Build!"\n # your_build_code\n } else {\n error "Something bad happened! Exiting..."\n }\n }\n }\n }\n\n stage (\'Test\') {\n steps {\n echo "Running tests..."\n // your_test_code\n }\n }\n\n stage (\'Deploy\') {\n steps {\n script {\n sh \'\'\'\n # your_deploy_code\n \'\'\'\n }\n }\n }\n }\n post {\n failure {\n sh \'\'\'\n # anything_you_need_to_perform_in_failure_step\n \'\'\' \n }\n\n success {\n sh \'\'\'\n # anything_you_need_to_perform_in_success_step\n \'\'\'\n }\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n上面的 Groovy 文件就位后,您现在要做的就是在各个 Jenkins 项目中调用它。由于您的 Jenkins 项目中可能已经有一个现有的 Jenkinsfile(如果没有,请创建它),因此您只需将该文件的现有内容替换为以下内容:
\n\n$ cat Jenkinsfile\n// Assuming you have named your shared-library as `my-shared-lib` & `Default version` to `master` branch in \n// `Manage Jenkins` \xc2\xbb `Configure System` \xc2\xbb `Global Pipeline Libraries` section\n@Library(\'my-shared-lib@master\')_\n\ndef params = [:]\n\nparams=[\n jenkins_var: "${env.JOB_BASE_NAME}",\n]\n\ncommonPipeline params\nRun Code Online (Sandbox Code Playgroud)\n\n注意:正如你在上面看到的,我正在调用commonPipeline.groovyfile. 因此,所有庞大的 Jenkinsfile 将减少到只有五六行代码,而这几行代码也将在所有这些项目中通用。另请注意,我在上面使用过jenkins_var。它可以是任何名称。它实际上并未使用,但是管道运行所必需的。一些 Groovy 专家可以澄清这一部分。
参考:https: //www.jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/
\n| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |