Как получить имя заблокированного ресурса в плагине Jenkins Lockable Resource - PullRequest
2 голосов
/ 09 апреля 2020

Я использую плагин Jenkins Lockable Resources, чтобы решить, какой сервер будет использоваться для различных операций сборки в моем декларативном конвейере. Я настроил свои блокируемые ресурсы, как показано в таблице ниже:

Resource Name       Labels

Win_Res_1           Windows
Win_Res_2           Windows
Win_Res_3           Windows
Lx_Res_1            Linux
Lx_Res_2            Linux
Lx_Res_3            Linux

Я хочу заблокировать label и затем получить имя соответствующего заблокированного resource.

Я пишу следующий код, но не могу получить желаемое значение r

int num_resources = 1;
def label = "Windows"; /* I have hardcoded it here for simplicity. In actual code, I will get ${lable} from my code and its value can be either Windows or Linux. */

lock(label: "${label}", quantity: num_resources)
{
    def r = org.jenkins.plugins.lockableresources.LockableResourcesManager; /* I know this is incomplete but unable to get correct function call */
    println (" Locked resource r is : ${r} \n");

    /* r should be name of resource for example Win_Res_1. */
}

Документация для Lockable Resources Plugin доступна здесь: https://jenkins.io/doc/pipeline/steps/lockable-resources/ и https://plugins.jenkins.io/lockable-resources/

1 Ответ

2 голосов
/ 09 апреля 2020

Вы можете получить имя заблокированного ресурса, используя параметр variable шага рабочего процесса lock. Эта опция определяет имя переменной среды, в которой будет храниться имя заблокированного ресурса. Рассмотрим следующий пример.

pipeline {
    agent any

    stages {
        stage("Lock resource") {
            steps {
                script {
                    int num = 1
                    String label = "Windows"

                    lock(label: label, quantity: num, variable: "resource_name") {
                        echo "Locked resource name is ${env.resource_name}"
                    }
                }
            }
        }
    }
}

В этом примере доступ к заблокированному имени ресурса можно получить с помощью переменной env.resource_name. Вот результат работы конвейера.

[Pipeline] {
[Pipeline] stage
[Pipeline] { (Lock resource)
[Pipeline] script
[Pipeline] {
[Pipeline] lock
Trying to acquire lock on [Label: Windows, Quantity: 1]
Lock acquired on [Label: Windows, Quantity: 1]
[Pipeline] {
[Pipeline] echo
Locked resource name is Win_Res_1
[Pipeline] }
Lock released on resource [Label: Windows, Quantity: 1]
[Pipeline] // lock
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Вы можете видеть, что значение Win_Res_1 было присвоено переменной env.resource_name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...