如何在Jenkins共享库中运行shell脚本文件

628mspwn  于 2023-10-17  发布在  Jenkins
关注(0)|答案(1)|浏览(191)

我想从共享库本身执行一个shell文件。
下面是文件的路径:

libraryFoo/resources/foo.sh

我的PipelineUtils包在库中的路径:libraryFoo/src/f1.org.pipeline/PipelineUtils

class PipelineUtils implements Serializable {
   ...
   def shell() {
    pipeline.sh(
            script: resources/foo.sh,
            returnStdout: true
    )
  }
}

并且它在管道中实施:

@Library('libraryFoo') _
import f1.org.pipeline.PipelineUtils

...

    stage('Tag SCM') {
        def utils = new PipelineUtils()
        utils.shell()
    }
h22fl7wq

h22fl7wq1#

为了从共享库的resources文件夹中读取文件,您需要使用专门为此创建的指定步骤libraryResource:

libraryResource:从共享库加载资源文件

从共享库中读取资源并将其内容作为普通字符串返回。

*资源

共享库的**/resources**文件夹中资源的相对(/分隔)路径。

*encoding(可选)阅读资源时使用的编码。如果留空,将使用平台默认编码。通过指定“Base64”作为编码,二进制文件可以读入Base64编码的字符串。

因此,在您的情况下,您可以使用它来加载脚本并使用sh步骤运行它,假设pipeline是您的对象,它包含脚本上下文,它看起来像:

class PipelineUtils implements Serializable {
   ...
def shell() {
   pipeline.sh(
      // Load the script as string and run using sh step
      script: pipeline.libraryResource('foo.sh'),
              returnStdout: true
   )
}

或者,如果将来用途:需要,您也可以加载脚本并将其重写为本地文件:

class PipelineUtils implements Serializable {
   ...
def shell() {
   // Load  the file from resources folder and recreate it locally
   def fileContent = pipeline.libraryResource('foo.sh')
   pipeline.writeFile(file: 'localFile.sh`, text: fileContent)

   pipeline.sh(
       // Use the file from the file System
       ...
   )
}

相关问题