Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker在Jenkins管道中生成意外EOF_Docker_Exception_Jenkins_Groovy_Jenkins Pipeline - Fatal编程技术网

Docker在Jenkins管道中生成意外EOF

Docker在Jenkins管道中生成意外EOF,docker,exception,jenkins,groovy,jenkins-pipeline,Docker,Exception,Jenkins,Groovy,Jenkins Pipeline,我确信我不是唯一一个对如何处理这样的事情感兴趣的人:Jenkins管道中的docker build阶段由于意外的EOF而失败(可能有很多原因,在我的例子中,docker守护进程是在从机上重新启动的) 部署阶段开始了,因为意外的EOF实际上不会引发任何错误,因此不存在要捕获的异常,因此构建状态为null。 我知道这不是一种常见的情况,但我们如何处理smth这样的问题,以便在构建中断的情况下不运行以下阶段 其他详情: @JRichardsz,谢谢你的回答!通常是currentBuild.result

我确信我不是唯一一个对如何处理这样的事情感兴趣的人:Jenkins管道中的docker build阶段由于意外的EOF而失败(可能有很多原因,在我的例子中,docker守护进程是在从机上重新启动的)

部署阶段开始了,因为意外的EOF实际上不会引发任何错误,因此不存在要捕获的异常,因此构建状态为null。
我知道这不是一种常见的情况,但我们如何处理smth这样的问题,以便在构建中断的情况下不运行以下阶段

其他详情: @JRichardsz,谢谢你的回答!通常是currentBuild.result。默认为null,例如,除非在成功执行阶段时显式将其设置为success,否则它将为null。但总的来说,同样可以通过尝试捕捉来实现,如:

if (deployableBranches.contains(env.BRANCH_NAME)) {
try {
    stage('Build image') {
      ansiColor('xterm') {
        appImage = docker.build 
("${projectName}:${env.BRANCH_NAME}-${gitCommit}", "--build-arg 
SKIP_LINT=true .")
      }
    }

stage('Push image') {
  docker.withRegistry("${registryUrl}", "${dockerCredsId}") {
    appImage.push()
    appImage.push "${env.BRANCH_NAME}-latest"
  }
}

stage('Deploy') {
  build job: 'kubernetes-deploy', parameters: [
      /////
  ]
    }
  } catch (e) {
    // A shell step returns with a nonzero exit code
    // When pipeline is in a shell step, and a user presses abort
    if (e.getMessage().contains('script returned exit code 143')) {
        currentBuild.result = "ABORTED"
    } else {
      currentBuild.result = "FAILED"
    }
    throw e
  } finally {
    // Success or failure or abort, always send notifications
    stage('Send deployment status') {
      helpers.sendDeploymentStatus(projectName, currentBuild.result, 
      helpers.getCommitHashShort())
    }
  }
}

但问题是,stage(‘Build image’)可能会像我的情况一样在没有任何错误代码的情况下退出

我有一个类似的要求:“如果某个规则在阶段a中执行,则以下阶段不得运行”

这对我很有用:

def flag;

node {

  stage('A') { 
    flag = 1;
  }

  stage('B') { 
    // exit this stage if flag == 1
    if(flag == 1){
      return;
    } 

    //start of stage B tasks
    ...
  }

}
您还可以使用一些jenkins变量,如currentBuild.result,而不是这样的标志:

node {

  stage('A') { 
    //stage A tasks
    //this stage could modify currentBuild.result variable
  }

  stage('B') { 
    // exit this stage if currentBuild.result is null , empty, "FAILURE", etc
    if(currentBuild.result == null || 
       currentBuild.result == "" || 
       currentBuild.result=="FAILURE" ){

      return;
    } 

    //stage B tasks
  }

}

这可能在docker 18.09中修复,如果它与我想到的错误相同:
node {

  stage('A') { 
    //stage A tasks
    //this stage could modify currentBuild.result variable
  }

  stage('B') { 
    // exit this stage if currentBuild.result is null , empty, "FAILURE", etc
    if(currentBuild.result == null || 
       currentBuild.result == "" || 
       currentBuild.result=="FAILURE" ){

      return;
    } 

    //stage B tasks
  }

}