2016-11-28 44 views

回答

0

首先,为什么你不想在代码中使用Jenkinsfile?流水线和代码文件一样重要。

除此之外,你可以加载groovy文件作为管道脚本进行评估。您可以从SCM选项的不同位置执行此操作,然后检出实际的代码。但这会迫使您手动处理分支构建。

另一种选择是拥有一个非常基本的Jenkins文件,只检出一个外部管道。

你会得到这样的事情:

node{ 
    deleteDir() 

    git env.flowScm 
    def flow = load 'pipeline.groovy' 
    stash includes: '**', name: 'flowFiles' 

    stage 'Checkout' 
    checkout scm // short hand for checking out the "from scm repository" 

    flow.runFlow() 
} 

凡pipeline.groovy文件将包含实际的管道应该是这样的:

def runFlow() { 
    // your pipeline code 

} 

// Has to exit with 'return this;' in order to be used as library 
return this; 
+0

我不想它在开源项目中,因为构建脚本依赖于构建环境:它们包含工具的绝对路径,取决于特定的OS /工具版本等。他们将在存储库中完全无用。CI作为代码非常适合专有产品,这绝对会*在企业环境中建立。 –

1

我也遇到同样的问题,因为你。尽管将构建过程作为代码的一部分的想法很好,但有信息表明Jenkinsfile包含的内容不是项目构建本身固有的,而是特定于可能更改的构建环境实例。

我做到了这一点的方法是:

  1. 封装核心构建过程中的一个脚本(build.pybuild.sh)。这可以调用特定的构建工具,如制作,CMake的,蚂蚁等

  2. 通过Jenkinsfile告诉詹金斯来调用一个全局库中定义的函数

  3. 定义全局詹金斯建立函数来调用编译脚本(例如build.py)与适当的环境设置。例如,使用自定义工具并设置PATH

所以对于第2步,在项目中创建一个Jenkinsfile只包含线

build_PROJECTNAME() 

其中PROJECTNAME是基于项目的名称。

然后使用Pipeline Shared Groovy Libraries Plugin,并呼吁vars/build_PROJECTNAME.groovy包含设置环境和调用项目构建脚本的代码(例如build.py)共享库的储存库创建一个Groovy脚本:

def call() { 
    node('linux') { 
     stage("checkout") { 
      checkout scm 
     } 
     stage("build") { 
      withEnv([ 
       "PATH+CMAKE=${tool 'CMake'}/bin", 
       "PATH+PYTHON=${tool 'Python-3'}", 
       "PATH+NINJA=${tool 'Ninja'}", 
      ]) { 
       execute 'python build.py' 
      } 
     } 
    } 
}