我刚开始使用Jenkins声明性管道。在我支持一些类似的项目时,我考虑将类似的管道步骤(甚至阶段)放入可重用的构建块中。这些区块应保持在一个中心点,然后由单独的管道包括在内(例如:干燥)。
我将共享库视为脚本化管道的一个选项,但我不确定它是否也适用于声明性管道。
你知道在Jenkins声明性管道中使用像构建块这样的东西的方法吗?
举例说明:
如果您有一个用于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'
}
}
}
}
但是,与其将此复制到所有项目中,如果下面的用例可以轻松处理,那就太好了。
对于不需要自定义的项目,最好将其用于examle,如:
defaultMavenpipeline{}
其中defaultMaven管道
将被上述管道替换(我认为这对于共享库是可能的)。
对于一个只需要定制一些阶段的项目,这样的事情可能吗?
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'
}
}
}
}
很抱歉长时间的帖子,非常感谢你提前!
您可以为此使用共享库。
我使用库中的vars部分来定义一个模板(工作流),src部分用可重用的方法编写类,从jenkins文件中,我只调用模板,为它提供项目特定的参数映射。
这允许我让开发人员只通过克隆和修改Jenkins文件来创建自己的项目,而我仍然可以控制执行。
在Jenkins文件中:
@Library('jenkinssharedlibrary') _
templatename([
parameter1: "value",
parameter2: "value"])
在共享库中:vars/templatename.groovy
import com.mydomain.someclassivemade
def call(Map<String, String> passedConfig) {
Myclass niceobject = new Myclass()
pipeline {
agent {
label 'test'
}
environment {
PROJECT_VERSION = "${passedConfig.version}"
}
tools {
jdk '....'
}
stages {
steps {
script {
niceobject.compile(mvn)
}
}}
}
在src文件夹中,您用重用的方法编写类: /src/com/mydomain/Someclassivemade.groovy
package com.mydomain.someclassivemade
def build (final String xyz){
sh("build comand with parameters")
}
return this // very important line :)
在一种更简单的方法中,您可以将方法放在vars中,并从jenkins文件中调用它们。詹金斯的力量在于它的灵活性。
另一个有用的链接
PS:我可能有语法错误,因为我直接写在这里,请告诉我修复它们!
您可以将声明性管道与共享库一起使用。
请按照以下步骤操作:
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在任何管道作业中访问共享库
master
3) 访问项目中的共享库
Pipeline脚本
部分,添加以下代码:@Library('my-shared-lib')_
pipeline {
agent any
stages {
stage('Info') {
steps {
echo 'Publishing some details here'
}
}
stage('Using shared-library') {
steps {
sayHello 'Alex'
}
}
}
}
就这样。你完了!:)
注意:对于Jenkinsfile中共享库中使用的下划线()(来自官方链接),对于仅定义全局变量的共享库(
vars/
),或仅需要全局变量的Jenkinsfile,注释模式@Library('my-shared-Library')对于保持代码简洁可能很有用。本质上,符号
\uu
不是注释不必要的导入语句,而是注释符号。
输出:
我有几个不同repo的Jenkins声明性管道,它们触发数据库刷新,以及依赖于数据库的单元测试。这些Jenkins作业是从GitHub中的pull请求触发的。 为了避免资源冲突,我需要防止这些作业同时运行——无论是在每个项目内还是在各个项目之间。 “油门并发构建”插件似乎就是为此而构建的。 我已经安装了插件,并配置了如下类别: 我在Jenkins文件中添加了“throttle”选项,其中一个存储库
我的存储库中有一个带有Jenkinsfile的多分支管道,我能够拥有我的CI工作流程(构建 为了设置我的夜间构建,我添加了 但是现在,如果我们只是在晚上构建由cron表达式触发的作业,如何执行分析步骤呢? 我的简化构建阶段如下所示:
问题内容: 我正在使用声明性管道语法在Docker容器中执行一些CI工作。 我注意到,用于Jenkins的Docker插件使用主机中jenkins用户的用户ID和组ID运行一个容器(即,如果jenkins用户具有用户ID 100和组ID 111,它将运行管道以创建带有命令)。 我遇到了一些问题,因为该容器将以不存在的用户运行(特别是我遇到了用户没有主目录的问题)。所以我想到了创建一个Dockerf
我在詹金斯内部写了一个声明性管道。此管道应在远程Docker服务器上的Docker容器中运行。 我阅读了自定义执行环境: 自定义执行环境 Pipeline的设计可以轻松地将Docker映像用作单个阶段或整个管道的执行环境。这意味着用户可以定义其管道所需的工具,而无需手动配置代理。实际上,任何可以打包在Docker容器中的工具。只需对Jenkins文件进行少量编辑即可轻松使用。 它工作,但它使用詹金
我正在尝试从管道中自动创建Jenkins管道构建。 我有一个管道,它创建一个比特桶存储库并向其提交一些代码,包括一个Jenkinsfile。 我需要向此管道添加另一个步骤,然后为其创建管道生成,这将运行 Jenkinsfile 中的步骤。 我认为Jobs DSL应该能够处理这一点,但我找到的文档非常稀少,我仍然不完全确定是否有可能或如何做到这一点。 任何帮助都将不胜感激。我想生成的Pipeline
问题内容: 我正在尝试将旧样式的基于项目的工作流转换为基于Jenkins的管道。在浏览文档时,我发现有两种不同的语法分别命名为和。例如最近(2016年底)发布的Jenkins网络语法。尽管有一个新的语法版本,Jenkins仍然也支持脚本语法。 现在,我不确定这两种类型的哪种情况最合适。语法将很快被弃用吗?詹金斯管道的未来会是这样吗? 任何可以分享有关这两种语法类型的想法的人。 问题答案: 最初创建