0

我目前正在使用 Jenkins 库,而我的工作没有问题。现在我正在尝试做一些重构,有一大块代码可以用 AWS 帐户来确定,以用于我们目前在库中拥有的几乎所有工具。

我创建了以下文件“get account.groovy”

class GetAccount {
    def getAccount(accountName) {
        def awsAccount = "abcd" 
        return awsAccount;
    }
}

然后我尝试从其他 groovy 脚本之一中执行此操作:

def getaccount = load 'getaccount.groovy'


def awsAccount = getaccount.getAccount(account)

但这不起作用,因为它正在当前工作目录中而不是库目录中查找该文件

我无法弄清楚从已经被使用的库中调用另一个类的最佳方法是什么。

4

1 回答 1

1

Jenkins loadDSL 旨在加载作业工作区中可用的外部化 groovy 文件,如果您尝试加载 Jenkins 共享库中可用的 groovy 脚本,它将无法工作,因为共享库永远不会在作业工作区中签出。

如果您遵循如下标准共享库结构,则可以这样做:

shared-library
├── src
│   └── org
│       └── any
│           └── GetAccount.groovy
└── vars
    └── aws.groovy

GetAccount.groovy

package org.any
class GetAccount {
  def getAccount(accountName) {
     def awsAccount = "abcd" 
     return awsAccount;
  }
} 

aws.groovy

import org.any;
def call() {
   def x = new GetAccount()
   // make use of val and proceed with your further logic
   def val = x.getAccount('xyz')
}

在您的 Jenkinsfile(声明式或脚本式)中,您可以同时使用共享库 groovy 类,例如:

使用 aws.groovy

脚本化管道

node {
  stage('deploy') {
    aws()
  }
}

声明性管道

pipeline {
  agent any;
  stages {
    stage('deploy') {
      steps {
         aws()
      }
    }
  }
}

利用 GetAccount.groovy 脚本管道

import org.any
node {
  stage('deploy') {
    def x = new GetAccount()
    // make use of val and proceed with your further logic
    def val = x.getAccount('xyz')
  }
}

声明性管道

import org.any
pipeline {
  agent any;
  stages {
    stage('deploy') {
      steps {
         script {
            def x = new GetAccount()
            // make use of val and proceed with your further logic
            def val = x.getAccount('xyz')
         }
      }
    }
  }
}
于 2021-02-07T11:49:23.353 回答