相关疑难解决方法(0)

将Jenkins管道阶段显示为失败而不会使整个作业失败

这是我正在玩的代码

node {
    stage 'build'
    echo 'build'

    stage 'tests'
    echo 'tests'

    stage 'end-to-end-tests'
    def e2e = build job:'end-to-end-tests', propagate: false
    result = e2e.result
    if (result.equals("SUCCESS")) {
        stage 'deploy'
        build 'deploy'
    } else {
        ?????? I want to just fail this stage
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让我将"端到端测试"阶段标记为失败,而不会使整个工作失败?传播假只是总是将舞台标记为真,这不是我想要的,但传播真实标志着失败的工作,我也不想要.

groovy jenkins jenkins-workflow jenkins-pipeline

48
推荐指数
5
解决办法
7万
查看次数

在多个模拟器上连接了Android测试

背景

我想在不同的模拟器上对Jenkins运行我的Android Instrumented测试.假设我有100个测试和4个模拟器,我想在每个上运行25个测试.

./gradlew connectedDebugAndroidTest在Jenkins Pipeline中为4个模拟器执行并行操作

stage('Instrumented Tests') {
    parallel(
            emu1: {
                 runInstrumentedTestOnEmu(...)
            },
            emu2: {
                 runInstrumentedTestOnEmu(...)
            }
            ...
    )
}
Run Code Online (Sandbox Code Playgroud)

connectedDebugAndroidTest 将生成其他命令以设置运行检测测试的环境.

...
:app:transformNativeLibsWithMergeJniLibsForDebugAndroidTest
:app:processDebugAndroidTestJavaRes NO-SOURCE
:app:transformResourcesWithMergeJavaResForDebugAndroidTest
:app:validateSigningDebugAndroidTest
:app:packageDebugAndroidTest
:app:assembleDebugAndroidTest
:app:connectedDebugAndroidTest
Run Code Online (Sandbox Code Playgroud)

当环境准备就绪时,:app:connectedDebugAndroidTest它会在仿真器上开始运行测试.

我不想为所有并行调用运行这些过程(在这种情况下,它将是其中的4个),因为显然我多次完成相同的工作.从理论上讲,最好的选择是parallel在所有内容准备好运行测试之前和之后执行设置,然后进入parallel步骤并在每个模拟器上开始测试.

是否可以在不执行任何操作的情况下执行所有预设置步骤connectedDebugAndroidTest

此外,如果我connectedDebugAndroidTest在4个仿真器上并行运行,则构建崩溃,因为intermediate当其他并行构建已删除该文件时,gradle会尝试从目录中读取文件,从而导致崩溃.

您可以使用上面提到的设置在github中查看此测试项目.

android jenkins android-instrumentation

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

如何继续使用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万
查看次数

詹金斯基于输入的连续交付管道跳过阶段

简化的管道如下所示:

 1. build
 2. unit test
 3. deploy to dev
 4. integration tests
 5. deploy to prod
Run Code Online (Sandbox Code Playgroud)

对于步骤5,我设置了Jenkins管道输入命令。我们不会在每次提交时都将产品部署到产品上,因此,如果我们中止所有这些工作,它将有大量的灰色版本。是否可以使用跳过选项,以使构建仍可以显示为绿色蓝色?

continuous-deployment jenkins jenkins-pipeline

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