标签: jenkins-declarative-pipeline

如何在Jenkins Declarative管道中创建方法?

在jenkins脚本管道中,我们可以创建方法并可以调用它们.

是否有可能在Jenkins声明性管道中?如何?

groovy jenkins jenkins-groovy jenkins-pipeline jenkins-declarative-pipeline

36
推荐指数
4
解决办法
3万
查看次数

在声明式jenkins管道中 - 我可以动态设置代理标签吗?

有没有办法动态设置代理标签而不是普通字符串?

这项工作有两个阶段:

  1. 第一阶段 - 始终在"主"代理上运行.在这个阶段结束时,我将知道第二阶段应该运行哪个代理.
  2. 第二阶段 - 应该在第一阶段确定的代理上运行.

我的(不工作)尝试看起来像这样:

pipeline {
    agent { label 'master' }
    stages {
        stage('Stage1') {
            steps {
                script {
                    env.node_name = "my_node_label"
                }
                echo "node_name: ${env.node_name}"
            }
        }

        stage('Stage2') {
            agent { label "${env.node_name}" }
            steps {
                echo "node_name: ${env.node_name}"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个回声工作正常,打印"my_node_label".第二阶段无法在标记为"my_node_label"的代理上运行,控制台将打印:

没有标签为'null'的节点

也许它可以提供帮助 - 如果我只是在标签字段中添加"$ {env}",我可以看到这是一个java类,因为它打印:

没有标有'org.jenkinsci.plugins.workflow.cps.EnvActionImpl@79c0ce06'标签的节点

jenkins jenkins-declarative-pipeline

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

如何参数化Jenkinsfile作业

我有Jenkins管道工作,其中作业之间的唯一区别是参数,单个"名称"值,我甚至可以使用多分支作业名称(虽然不是它作为BRANCH名称的JOB_NAME传递的内容,遗憾的是没有envs看起来合适而无需解析).如果我可以设置Jenkinsfile的外部,那将是很好的,因为那时我可以为所有各种工作重用相同的jenkins文件.

jenkins jenkins-pipeline jenkins-declarative-pipeline

12
推荐指数
2
解决办法
4114
查看次数

如何为詹金斯管道声明定义工作区体积

我正在尝试设置声明性管道,我希望将工作区作为容量声明持久化,以便大型 git checkout 可以更快。基于doc有选项workspaceVolumepersistentVolumeClaimWorkspaceVolume但我无法使其工作 - jenkins 总是执行以下操作:

volumeMounts:
 - mountPath: "/home/jenkins/agent"
   name: "workspace-volume"
   readOnly: false
volumes:
  - emptyDir: {}
    name: "workspace-volume"
Run Code Online (Sandbox Code Playgroud)

jenkins kubernetes jenkins-pipeline jenkins-declarative-pipeline

12
推荐指数
1
解决办法
3571
查看次数

如何继续使用Jenkins声明性管道语法中的失败阶段

我想在Jenkins声明性管道语法中定义多个阶段,这些阶段可以继续通过它们中的任何一个失败.我找不到任何真正重复的现有问题,因为它们都假定或允许脚本化语法.

pipeline {
    agent any
    stages {
        stage('stage 1') {
            steps {
                echo "I need to run every time"
            }
        }
        stage('stage 2') {
            steps {
                echo "I need to run every time, even if stage 1 fails"
            }
        }
        stage('stage 3') {
            steps {
                echo "Bonus points if the solution is robust enough to allow me to continue *or* be halted based on previous stage status"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了澄清,我不是在寻找如何在脚本语法中完成此任务.我试图理解这种流控制是否实际上是在声明性语法中支持和形式化的.为此,我将尝试准确定义我正在寻找的内容:

需要

  • 没有尝试/捕获.我不想下载到脚本模式,或者在另一个共享库或脚本块中"包装"我的声明性管道.
  • 没有post step恶作剧.我想要真正的多个阶段,而不是一个post always …

jenkins jenkins-pipeline jenkins-declarative-pipeline

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

如何使用Jenkin声明性管道在多个平台上构建和测试

我正在尝试做一些我认为应该做的事情,但我无法弄清楚如何做.

基本上我有一个Jenkins主机(在Linux上运行)和两个从机,一个在Windows上,另一个在macOS上.

我想在所有3个平台上构建我的项目,并在所有3个平台上运行GTest测试.

我可以构建并运行测试,但是junit步骤似乎没有收集任何测试结果.

我试图把post块放在任何地方,但它只是不起作用.如果我尝试将post块放在测试阶段或作为兄弟stages,我会收到以下错误:

Required context class hudson.FilePath is missing Perhaps you forgot to surround the code with a step that provides this, such as: node 这是由agent none- post块不知道在哪里运行.

所以我尝试将post块放在node我的parallel步骤中的块中,但是它似乎没有做任何事情 - 它甚至没有显示在控制台输出中.

这是我的Jenkinsfile:

pipeline {
    agent none
    stages {
        stage ('Clean') {
            steps {
                parallel (
                    "linux" : {
                        node ("linux") {
                            dir("build") {
                                deleteDir()
                                writeFile file:'dummy', text:'' // Creates the directory …
Run Code Online (Sandbox Code Playgroud)

cmake googletest jenkins jenkins-pipeline jenkins-declarative-pipeline

10
推荐指数
1
解决办法
3408
查看次数

如何在 Jenkinsfile 中签出存储库之前清理管道

我想进行Jenkins git 插件文档clean before checkout中描述的操作:

签出前清理 在每次签出之前通过删除所有未跟踪的文件和目录(包括 .gitignore 中指定的文件和目录)来清理工作区。...

但是如何将此选项添加到作为第一步执行的默认结账步骤中?

我觉得它应该是 git 插件扩展的一个选项,可以包含到optionsJenkinsfile 块中,如文档中所述:

options 指令允许从 Pipeline 本身配置特定于 Pipeline 的选项。Pipeline 提供了许多这样的选项,例如 buildDiscarder,但它们也可能由 插件提供......

但是如何知道这个插件提供了哪些选项及其名称呢?在文档中没有找到它,我也可能是错误的,clean before checkout应该放在optionsJenkinsfile 块中。

请帮忙。

jenkins jenkins-plugins jenkins-pipeline jenkins-declarative-pipeline jenkins-git-plugin

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

如何在声明性管道Jenkins中选择多个JDK版本

我想在Jenkins声明性管道中为不同的阶段使用不同的JDK版本.在第一阶段,我使用的是Java 8.在第二阶段,我使用的是Java 6.如何在Jenkins的声明性管道中选择多个JDK版本?

  pipeline {
  agent any

  tools {
    jdk 'jdk_1.8.0_151'
    jdk 'jdk_1.6.0_45'
  }

  stages {
    stage('java 8') {
      steps {
        sh 'java -version'
        sh 'javac -version'
      }
    }
    stage('java 6') {
      steps {
        sh 'java -version'
        sh 'javac -version'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-declarative-pipeline

8
推荐指数
3
解决办法
7761
查看次数

Jenkins:从与代理(另一个 Docker 容器)一起运行的阶段连接到 Docker 容器

我正在重新设计管道以使用声明式管道方法,以便我能够在每个阶段使用 Docker 映像

目前我有以下工作代码,它执行连接到在 Docker 容器中运行的数据库的集成测试。

node {
    // checkout, build, test stages...
    stage('Integration Tests') {            
        docker.image('mongo:3.4').withRun(' -p 27017:27017') { c ->
        sh "./gradlew integrationTest"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在使用声明式管道,相同的代码看起来像这样:

pipeline {
    agent none
    stages {
        // checkout, build, test stages...
        stage('Integration Test') {
            agent { docker { image 'openjdk:11.0.4-jdk-stretch' } }
            steps {
                script {
                    docker.image('mongo:3.4').withRun(' -p 27017:27017') { c ->
                        sh "./gradlew integrationTest"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:该阶段现在在 Docker 容器中运行docker.image(),并且运行会导致docker: …

jenkins docker jenkins-pipeline jenkins-declarative-pipeline

8
推荐指数
1
解决办法
5049
查看次数

具有动态矩阵轴值的声明式管道

嗨,我正在尝试进行 Jenknis-Declarative-Pipeline-Job 工作。

用例应该非常简单:
我想使用相同的 Jenkins 管道构建多个插件。为此,我编写了一个带有插件可以用于参数的接口的“JenkinsLibrary”。此参数之一是轴值。

遇到的问题与这篇 reddist 帖子非常相似。

我想从变量设置矩阵构建的“轴”的“值”。我没有想法,这甚至可能吗?

所以这是我的示例:
带有文件 my_library.groovy 的“JenkinsLibrary”

def call(Map i_options)
{
// later I will parse the options to set the values, but currently the step before already crashes ...

    def axis_1_values = "axis_1_value_A"
// already tried the following alternatives ...
//    def axis_1_values = 'axis_1_value_A'
//    def axis_1_values = '''axis_1_value_A'''
//    def axis_1_values = ["axis_1_value_A", "axis_2_value_A"]
    pipeline
    {
        agent any
        stages { stage("stage A") { matrix { …
Run Code Online (Sandbox Code Playgroud)

jenkins jenkins-pipeline jenkins-declarative-pipeline

8
推荐指数
1
解决办法
3119
查看次数