当前位置: 首页 > 知识库问答 >
问题:

基于存储库的Jenkins共享库中的跳过阶段

陈法
2023-03-14

我有一个用于所有存储库的通用Jenkins共享库,如下所示。

Vars/_publish.groovy

    pipeline {
        environment {
            abc= credentials(’abc')
            def= credentials(‘def’)
 
        }
        stages {
            stage('Build') {
                steps{
                    sh ‘docker build'
                }
            }
           stage('Unit-test') {
                steps{
                    sh ‘mvn test'
                }
            }

詹金斯档案

@Library('my-shared-library@branch') _

_publish() {
}

我有10个存储库,每个存储库都有自己的jenkins文件,如上图所示,它引用jenkins共享库(vars/_publish.groovy)。我这里有一个条件,我需要通过。对于少数存储库,我想跳过单元测试,只执行构建阶段。对于其他存储库,我需要两个阶段。是否有人可以根据存储库或存储库名称跳过特定阶段

共有2个答案

林子石
2023-03-14

我会像这样装饰我的共享库和文件,以实现您的场景。

Vars/_publish.groovy

def call(body={}) {
    def pipelineParams = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = pipelineParams
    body()
    pipeline {
        agent any;
        stages {
            stage('build') {
                steps {
                    echo "BUILD"
                }
            }
            stage('unitest') {
                when {
                    anyOf {
                        equals expected: true, actual: pipelineParams.isEmpty();
                        equals expected: false, actual: pipelineParams.skipUnitest
                    }  
                }
                steps {
                    echo "UNITEST"
                }
            }
        }
    }
}

当{}DSL决定是否跳过UnitTest阶段时,我正在使我的共享库能够接受来自Jenkinsfile的参数并使用

詹金斯档案

如果回购协议中的Jenkins文件包含以下详细信息,您将跳过unitest阶段

@Library('jenkins-shared-library')_
_publish(){
    skipUnitest = true
}

下面两个场景都将运行unitest阶段

@Library('jenkins-shared-library')_
_publish(){
    skipUnitest = false
}

@Library('jenkins-shared-library')_
_publish(){
}

詹甫
2023-03-14

是的,你可以使用这样的表达方式

pipeline {
  agent any 
  stages {
    stage('Test') {
     when { expression { return repositoryName.contains('dev') } } <---------Add put your repository name 'dev' so whenever the repository names is ''dev' then execute this stage
      steps {
        script {
        
        }
      }
   }
  }
}

def repositoryName() {
  def repositoryName = ['dev', 'test'] <----Add here the 10 repo name
  return repositoryName 
}

在我的例子中,repo的名称是dev和test,因此您可以添加相应的名称

 类似资料:
  • 问题内容: jenkins中的共享库文件在作业开始时加载,它存储在哪里?我正在尝试访问存储在共享库中的dockerfile,我需要在dockerbuild命令中提供的路径。有什么办法可以找出共享库文件在jenkins中的装载位置? 问题答案: 如果共享库是从SCM加载的,并且您的工作空间路径是,则将签出到或类似副本(如果该路径被另一个并发构建占用,则可能后缀数字)。 ,如果我理解正确,您是否不想在

  • 问题内容: 我正在从python脚本中调用一个so文件。据我了解,我真的不需要释放使用ctypes在python中打开的共享库。但是,在我的so文件代码中,它dlopen另一个so文件并且不执行dlclose()。在这种情况下,从python端使用安全吗?我不必释放在ctypes内部加载的共享库soe文件吗? 问题答案: 始终遵循 “自己清洁后清理 ”的规则(尽管现代技术会为您提供清洁方面的帮助)

  • 我们试图切换到jenkins管道,但我在groovy/java的低水平阻止了我们建立一个共享库。 这里是我的共享库(位于bitbucket中git repo的{root}/src/com/pipeline.groovy中)我必须承认,我在这里做什么都不知道,因为我不知道包裹的定义 Jenkins的管道看起来 通过所有这些设置,我最终得到了错误: 我怀疑我的漂亮包裹的定义,但我坚持这样做。 非常欢迎

  • 我通过jenkins管道(共享库)运行此代码。 它在本地工作,但在Jenkins管道中,我得到以下错误: 请帮帮我

  • 问题内容: 是否可以使用Go创建共享库(.so)? 更新 :为此创建了一个“ 问题 ”。 问题答案: 现在可以使用标志 您需要做的是首先运行以下命令: (以上代码使所有通用软件包都可共享!)然后 最后,在编译代码时,您需要运行: 上面这些就是什么,而不是静态链接所有内容而仅动态链接它们,您最终将获得更小的编译文件。为了让您了解我的带有静态链接的“ hello.go”文件为2.3MB,而使用动态链接