Can I import a groovy script from a relative directory into a Jenkinsfile?

烂漫一生 提交于 2019-11-29 19:08:01

问题


I've got a project structured like this:

/
/ Jenkinsfile 
/ build_tools /
              / pipeline.groovy # Functions which define the pipeline
              / reporting.groovy # Other misc build reporting stuff
              / dostuff.sh # A shell script used by the pipeline
              / domorestuff.sh # Another pipeline supporting shell-script

Is it possible to import the groovy files in /build_tools so that I can use functions inside those 2 files in my Jenkinsfile?

Ideally, I'd like to have a Jenkins file that looks something like this (pseudocode):

from build_tools.pipeline import build_pipeline
build_pipeline(project_name="my project", reporting_id=12345)

The bit I'm stuck on is how you write a working equivalent of that pretend import statement on line #1 of my pseudocode.

PS. Why I'm doing this: The build_tools folder is actually a git submodule shared by many projects. I'm trying to give each project access to a common set of build tooling to stop each project maintainer from reinventing this wheel.


回答1:


The best-supported way to load shared groovy code is through shared libraries.

If you have a shared library like this:

simplest-jenkins-shared-library master % cat src/org/foo/Bar.groovy
package org.foo;

def awesomePrintingFunction() {
  println "hello world"
}

Shove it into source control, configure it in your jenkins job or even globally (this is one of the only things you do through the Jenkins UI when using pipeline), like in this screenshot:

and then use it, for example, like this:

pipeline {
  agent { label 'docker' }
  stages {
    stage('build') {
      steps {
        script {
          @Library('simplest-jenkins-shared-library')
          def bar = new org.foo.Bar()
          bar.awesomePrintingFunction()
        }
      }
    }
  }
}

Output from the console log for this build would of course include:

hello world

There are lots of other ways to write shared libraries (like using classes) and to use them (like defining vars so you can use them in Jenkinsfiles in super-slick ways). You can even load non-groovy files as resources. Check out the shared library docs for these extended use-cases.



来源:https://stackoverflow.com/questions/43881014/can-i-import-a-groovy-script-from-a-relative-directory-into-a-jenkinsfile

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!