2016-08-02 3 views
1

У меня есть Jenkins трубопроводы Работа, которая имеет следующий код:Дженкинс 2,0 Pipeline и работа DSL

import hudson.model.* 
import hudson.util.* 
import hudson.scm.* 
import hudson.scm.SubversionChangeLogSet.LogEntry 

stage 'Build' 
node('master'){ 
    svn 'http://mysvn/url' 
    def build = Thread.currentThread()?.executable 
    def changeSet= build.getChangeSet() 
    . 
    . 
} 

Код находится с непроверенной «песочницей» (как это представлено на рисунке). enter image description here и я получаю эту ошибку: «?»

groovy.lang.MissingPropertyException: No such property: executable for class: java.lang.Thread 

Я не знаком с синтаксисом для Thread.currentThread()?.executable , что делает оператор.

Я нашел его и узнал о jenkins job-dsl plugin и ничего не нашел об этом операторе.

Я также попытался Script Console Pluginпо адресу: http://localhost:8080/script и я не по той же причине.

Поддерживает ли трубопровод плагин Jenkins DSL-JOB? следует ли мне импортировать что-то, чтобы заставить его работать?

ответ

0

Это отличный оператор, '?' является предотвращение NullpointerExceptions. Он делает следующее только в том случае, если первый не является нулевым.

Функция Песочница для предотвращения определенных вызовов, так кто-нибудь может добавить скрипты без одобрения администратора, но очень ограничены ...

0
def build = Thread.currentThread()?.executable 

Во-первых, указанное предложение может быть объяснено, как это,

Thread.currentThread() будет получать текущую текущую нить, в нормальном случае это будет пример класса Jenkins Executor, в этом классе есть атрибут,

/** 
* {@link hudson.model.Queue.Executable} being executed right now, or null if the executor is idle. 
*/ 
@GuardedBy("lock") 
private Queue.Executable executable; 

Jenkins AbstractBuild реализовать этот интерфейс, так что это означает, что вы действительно получите экземпляр AbstractBuild.

Однако это предложение не является работой для связанных с трубопроводом работ, поскольку проект трубопровода имеет разную структуру по сравнению со старыми заданиями Дженкинса. Он не распространяется на класс AbstractBuild.

Вот почему ваш скрипт не работает.

О вашем требовании, поскольку нет класса AbstrctBuild, поэтому на самом деле нельзя использовать множество методов, например, тот, который вы использовали.

Не знаю, есть ли умный способ получить изменения в работе с конвейером, или, может быть, вам понадобится реструктурировать свою работу для адаптации плагина трубопровода.

Br,

Tim

+0

Спасибо за ваше объяснение. Можно ли использовать dzl Дженкинса на трубопроводе? Кажется, что трубопровод Дженкинса зависит от этого модуля, могу ли я использовать этот api? –

+0

Что значит использовать работу dsl в конвейере? Любой пример? – Tim

+0

'шаги { maven ("test -Dproject.name = $ {project}/$ {branchName}") }' –

2

Here является соответствующий билет и ответ от cloudbees .. Ping оттуда:

def changeLogSets = currentBuild.rawBuild.changeSets 
for (int i = 0; i < changeLogSets.size(); i++) { 
    def entries = changeLogSets[i].items 
    for (int j = 0; j < entries.length; j++) { 
     def entry = entries[j] 
     echo "${entry.commitId} by ${entry.author} on ${new Date(entry.timestamp)}: ${entry.msg}" 
     def files = new ArrayList(entry.affectedFiles) 
     for (int k = 0; k < files.size(); k++) { 
      def file = files[k] 
      echo " ${file.editType.name} ${file.path}" 
     } 
    } 
} 
+0

Я попробую и дам вам знать :) спасибо за вашу помощь –