将Jenkins管道拆分为环境部分并作为模板进行阶段化

时间:2019-07-17 07:35:47

标签: xcode unity3d jenkins continuous-integration jenkins-pipeline

我们使用Jenkins服务器使用Unity和Xcode创建多个iOS / Android项目。目前,我们在项目存储库的每个根目录中都有一个Jenkins文件,其中包含整个配置并在一个文件中构建步骤:

pipeline {
  agent any

  environment {
    REPOSITORY_URL = 'ssh://git@XYZ.git'
    PROJECT_SUBDIR = ''
    BUILD_FOR_ANDROID = 'true'
    BUILD_FOR_IOS = 'true'
    UNITY_VERSION = '2018.4.0f1'
  }

  // how to load this from a template file? -->
  stages {
    stage('Checkout') {
      steps {
        script {
          if (env.PROJECT_SUBDIR) {
            env.PROJECT_DIR = sh(
              script: "echo ${env.WORKSPACE}/${env.PROJECT_SUBDIR}",
              returnStdout: true
            ).trim()
          } else {
            env.PROJECT_DIR = sh(
              script: "echo ${env.WORKSPACE}",
              returnStdout: true
            ).trim()
          }
        }

        // more stuff ...

      }
    }
  }
  // <--
}

在构建过程中是否可以从另一个文件(例如模板)加载“阶段”零件?这样会将与项目相关的配置部分与常见的“阶段”部分分开,我可以在单个或版本化的模板文件中更新所有项目存储库的构建过程吗?

如何使用环境变量?他们还是在相同的背景下还是我必须通过它们?

1 个答案:

答案 0 :(得分:0)

那是一个很好的建议。

我使用本页上提到的最后一种方法来管理它:

https://jenkins.io/doc/book/pipeline/shared-libraries/#defining-declarative-pipelines

所以我将管道复制到名为groovy的文件中

/vars/run_pipeline_template.groovy

在我的新存储库中。在此之前,我将其称为pipeline.groovy,这不是我的最佳主意,因为这是一个受保护的关键字。我将环境变量的定义保留在以前的Jenkinsfile中。 env.VAR_NAME仍可以访问它们,而无需将它们转发到库脚本。该库位于其自己的Git存储库中,我已将此库添加到“全局管道库”部分的Jenkins配置中。这也解决了版本问题,因为您可以定义在Jenkinsfile中导入库模板时使用哪个branch / tag / hash。

谢谢。