gpt4 book ai didi

jenkins - 在 Jenkins 声明式管道中使用构建 block

转载 作者:行者123 更新时间:2023-12-05 02:53:33 25 4
gpt4 key购买 nike

我刚开始使用 Jenkins 声明式管道。当我支持一些类似的项目时,我正在考虑将类似的管道步骤(甚至阶段)放入可重用的构建 block 中。这些 block 应该在一个中心点进行维护,然后由各个管道包含(说:DRY)。

我看到共享库是脚本化管道的一个选项,但我不确定它是否也适用于声明式管道。

您知道在 Jenkins 声明式管道中使用构建 block 之类的方法吗?

示例说明:

如果您有一个用于 Maven 项目的标准管道(例如 Spring Boot),它看起来有点像:

pipeline {
agent {
dockerfile true
}
stages {
stage('Build') {
steps {
sh 'mvn -U -DskipTests clean package'
}
}
stage('Test') {
parallel {
stage('Unit Tests') {
steps {
sh 'mvn test'
}
}
stage('Integration Tests') {
steps {
sh 'mvn integration-test'
}
}
}
}
stage('Deploy') {
steps {
sh 'mvn deploy'
}
}
}
}

但是,与其将其复制到所有项目,不如轻松处理以下用例,那就太好了。

对于不需要自定义的项目,最好将其用于以下示例:

defaultMavenpipeline{}

其中 defaultMavenpipeline 将被上述管道替换(我认为这可以通过共享库实现)。

对于只需要自定义某些阶段的项目,这样的事情可能吗?

pipeline {
defaultDockerAgent{}
stages {
stage('Build') {
steps {
sh 'mvn -U -DskipTests clean package'
// ... customize some stuff ...
}
}
defaultTestStage{}
stage('Deploy') {
steps {
// ... customize some stuff ...
sh 'mvn deploy'
}
}
}
}

抱歉发了这么长的帖子,非常感谢您!

最佳答案

您可以通过 Shared-Library 使用声明式管道。

请按照以下步骤操作:

1) 创建共享库

  • 创建存储库共享库
  • 在上面的存储库中创建一个名为 vars 的目录。在 vars 目录中,创建一个包含以下内容的文件 sayHello.groovy:

// vars/sayHello.groovy
def call(String name = 'human') {
// Any valid steps can be called from this code.
// Can be used in both scripted and declarative pipeline
echo "Hello, ${name}."
}

2) 配置 Jenkins 以在任何管道作业中访问共享库

  • 转到管理 Jenkins » 配置系统 » 全局管道库部分
  • 将库命名为任何你想要的名称(在我的例子中,my-shared-library 如下所示)
  • 添加包含您的 Groovy 代码的分支名称。在我的例子中,它在默认分支中,即 master
  • 除非您知道自己在做什么,否则无需选中/取消选中复选框

3) 访问项目中的共享库

  • 在 Jenkinsfile 或 Pipeline script 部分,添加以下代码:

@Library('my-shared-lib')_

pipeline {
agent any

stages {
stage('Info') {
steps {
echo 'Publishing some details here'
}
}

stage('Using shared-library') {
steps {
sayHello 'Alex'
}
}
}
}

就是这样。你完成了! :)

注意:对于Jenkinsfile中上面共享库中使用的下划线(_),来自official link , 对于只定义全局变量 (vars/) 的共享库,或者只需要一个全局变量的 Jenkinsfile,注解模式 @Library('my-shared-library') _ 可能有助于保持代码简洁。本质上,不是注释不必要的导入语句,而是注释符号 _

输出:

enter image description here

关于jenkins - 在 Jenkins 声明式管道中使用构建 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62190395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com