Распространение журналов из общей библиотеки на консоль задания jenkins

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

Макет проекта, как показано ниже:

введите описание изображения здесь

Проект состоит из двух основных частей:

  1. Глобальные общие переменные, которые помещаются в папку vars

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

введите описание изображения здесь

Внутри класса groovy я использую println для записи отладочной информации.

введите описание изображения здесь

Но он никогда не распечатывался, когда он вызывается через задание конвейера Дженкинса.

введите описание изображения здесь

Консоль журнала работы Дженкинса, как показано ниже:

введите описание изображения здесь

Может ли кто-нибудь показать мне, как передавать журналы из класса groovy в консоль задания jenkins, поскольку я могу видеть только журнал из println в глобальном общем сценарии, отображаемом в консоли журнала.


person Joey Trang    schedule 16.11.2017    source источник
comment
Вы заставили его работать?   -  person Kaliyug Antagonist    schedule 10.01.2019


Ответы (3)


Я просто нашел способ сделать это, вызвав шаг println, доступный в задании jenkins.

В основном я создаю функцию-оболочку, как показано ниже, в классе Groovy PhoenixEurekaService:

введите описание изображения здесь

Фактически, эти шаги представляют собой рабочую среду jenkins, переданную в класс Groovy через конструктор. Таким образом, мы можем вызывать любые шаги, доступные в задании jenkins, в классе Groovy.

введите описание изображения здесь

В глобальном отличном скрипте PhoenixLib.groovy

введите описание изображения здесь

Я не уверен, есть ли другой способ сделать это ...

person Joey Trang    schedule 16.11.2017
comment
Где вы вызываете log () и как, черт возьми, вы передаете шаги в свой конструктор PhoenixEurekaService из вашего Jenkinsfile? - person Andrew Gray; 05.03.2018
comment
Вам нужно передать this в качестве аргумента из скрипта конвейера. Я использую отличный класс, который я создаю, передавая this в качестве параметра из глобального скрипта в каталоге / var. В конструкторе я сохраняю его в переменной-члене с именем this. См. jenkins.io/doc/book/pipeline/shared-libraries. - person cmac; 25.03.2018
comment
Спасибо. Очень полезная информация. Я все еще частично застрял в базовой java-программе, используемой библиотекой, которая ведет журнал f.e. log4j. Журналы, записанные в stdout, не отображаются в журнале jenkins. Каким-то образом этот -этот объект нужно передать фреймворку log4j. У кого-нибудь уже есть эта работа? - person Mike; 13.04.2018
comment
Я делаю то же самое. Я чувствую, что должен быть способ привязать к общей системе ведения журнала jenkins так же, как работает плагин, чтобы я мог использовать log4j или какой-либо другой фреймворк. Однако эта сложность может не купить мне многого. Достаточно простого базового класса с членом steps. - person Peter Kahn; 18.07.2019
comment
Кстати, вы играли с github.com/jenkinsci/JenkinsPipelineUnit? Я использую его для запуска модульных тестов в моей общей библиотеке с издевательством. Это кажется немного сложным, но у меня есть сборка с покрытием для тестирования библиотеки. Поэтому я могу совершить это с уверенностью или некоторой степенью уверенности. - person Peter Kahn; 18.07.2019

Все команды / DSL, например: println, sh, bat, checkout и т. Д., Не могут быть доступны из общей библиотеки. ref: https://jenkins.io/doc/book/pipeline/shared-libraries/.

Вы можете получить доступ к шагам, передав их в общую библиотеку.

//your library
package org.foo
class Utilities implements Serializable {
  def steps
  Utilities(steps) {this.steps = steps}
  def mvn(args) {
    steps.println "Hello world"
    steps.echo "Hello echo"
    //steps.sh "${steps.tool 'Maven'}/bin/mvn -o ${args}"
  }
} 

jenkinsfile

@Library('utils') import org.foo.Utilities
def utils = new Utilities(this)
node {
  utils.mvn '!!! so this how println can be worked out or any other step!!'
}
person old-monk    schedule 29.05.2018

Я не на 100% уверен, что это то, что вы ищете, но распечатать что-либо в общей библиотеке можно, выполнив шаги и используя echo. См. Шаги доступа в https://jenkins.io/doc/book/pipeline/shared-libraries/

person Steve    schedule 20.12.2017