加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Jenkinsfile – Script Pipeline语法中的条件阶段执行

发布时间:2020-12-14 05:00:40 所属栏目:百科 来源:网络整理
导读:我们正在为Jenkinsfile使用Script Pipeline语法,它有很多阶段定义来构建和部署我们的代码.我有一个用例,如果我正在进行完整构建,我想运行所有阶段,但如果我需要执行一些AWS路由,则只运行一个特定阶段.我知道我可以使用if( expression)跳过一个阶段或运行一个
我们正在为Jenkinsfile使用Script Pipeline语法,它有很多阶段定义来构建和部署我们的代码.我有一个用例,如果我正在进行完整构建,我想运行所有阶段,但如果我需要执行一些AWS路由,则只运行一个特定阶段.我知道我可以使用if(< expression>)跳过一个阶段或运行一个阶段.问题是我不想将条件应用到我的Jenkinsfile中的每个阶段.

在新的Declarative Pipeline语法中,使用stage..when选项很容易实现.我们的基础结构中使用了很多自定义Groovy辅助函数,所以此时我无法从Script Pipeline语法切换到新的Declarative Pipeline语法.我最终在现有的Jenkins文件上做的是这样的..

原来jenkins文件

stage('Checkout Code') {}
  stage('Build') {}
  parallel(
    stage('Sonar Analysis') {}
    stage('CLM Analysis') {}
    stage('Security Analysis') {}
  )
  stage('Build Docker Image') {}
  ...
  ...
  stage('QA Deploy') {}
  stage('QA Routing') {}
  ...
  ...
  stage('Prod Deploy') {}
  stage('Prod Routing') {}

变成

if (fullDeploy){
    stage('Full Build') {
        stage('Checkout Code') {}
        stage('Build') {}
        parallel(
          stage('Sonar Analysis') {}
          stage('CLM Analysis') {}
          stage('Security Analysis') {}
        )
        stage('Build Docker Image') {}
        ...
        ...
        stage('QA Deploy') {}
        stage('QA Routing') {}
        ...
        ...
        stage('Prod Deploy') {}
        stage('Prod Routing') {}          
    }
  }

  if (routeOnly){
    stage('Prod Routing') {}    
  }

这让我觉得有点hacky,我在Jenkins文档上找不到任何提供这种方法的好方法.

有没有人有更好的方法可以加入这个?

解决方法

我不使用脚本化的流水线,但我很确定你采用的是这种方式(将条件阶段包含在if中).

如果你想让它更像声明,你可以在每个阶段放置if语句.这样,阶段仍然可视化.当他们实际上没有做任何事情时,这可能是也可能不是.

我认为切换到声明将是在蓝海UI中以不同方式显示跳过的阶段的唯一方法(当它们由于when子句而被跳过时它们看起来不同),但实际上你的当前解决方案中的代码实际上是最小的.这对我来说似乎不太讨厌,但这种事情可能是主观的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读