Как отобразить время, необходимое для запуска сборки в Jenkins?

Я настраиваю процесс создания приложений Android с помощью конвейера Jenkins.

В начале и в конце сборки slackSend (канал: «# slack-test», цвет: «предупреждение», сообщение: «Закончено: задание» $ {env.JOB_NAME} [$ {env.BUILD_NUMBER}] ' State: $ {STATE}. Артефакты можно просмотреть здесь: $ {env.BUILD_URL} артефакт / Продукт / сборка / выходы / ") отправляется на соответствующий канал Slack.

Соответствующая часть Jenkinsfile выглядит так:

new Date()

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

Можно ли обойтись без добавления внешних плагинов? если есть переменная среды, которая хранит эту информацию, она будет идеальной, но я не могу найти такую ??переменную.

jenkins,build,jenkins-pipeline,

5

Ответов: 2


2 принят

Поскольку этот сценарий jenkins-pipe находится в Groovy, вы можете просто использовать "Current time ${new Date()}"его. Что-то вроде этого messageв messageаргументе должно работать:

slackSend (channel: '#slack-test', color: 'warning', message: "Current time ${new Date()}")

Это приведет к следующему сообщению на вашем канале:

Current time: Thu Oct 13 17:25:12 CEST 2016

Если вам нужен конкретный формат даты, вы можете использовать format(String format)метод, например "${new Date().format('dd/MM/yyyy')}":

slackSend (channel: '#slack-test', color: 'warning', message: "Current time ${new Date().format('dd/MM/yyyy')}")

Это приведет к следующему сообщению:

Current time: 13/10/2016

ОБНОВИТЬ

Поскольку вы не хотите использовать какие-либо внешние плагины для возможного способа сделать это (это немного сложно), нужно сохранить время начала в файле, используя следующий скрипт в вашем проекте jenkins:

def f = new File("/tmp/buildStart.txt")
def start = new Date().format('dd/MM/yyyy HH:mm:ss')
f.text = start
slackSend color: 'red', message: "Build start at ${start}"

Затем в другом проекте jenkins, где заканчивается сборка, проанализируйте дату из файла и получите разницу с текущим временем:

def f = new File("/tmp/buildStart.txt")
def startDate = new Date().parse('dd/MM/yyyy HH:mm:ss',f.text)
def endDate = new Date()
def tookTime = groovy.time.TimeCategory.minus(endDate,startDate).toString()
slackSend color: 'red', message: "Total time: ${tookTime}"

4

Вы можете использовать, ${currentBuild.durationString}чтобы получить продолжительность сборки. Я использую его в своих декларативных сценариях конвейера.

Примечание . Если вы используете плагин HipChat , вы можете использовать ${BUILD_DURATION}(ранее ${DURATION}) переменную в своей hipchatSendкоманде (она распространяется через плагин с некоторыми другими переменными).

Пример:

post {
  success {
    hipchatSend color: 'GREEN', room: 'My room', failOnError: true, notify: false, 
      message: 'Build <a href='${BUILD_URL}'>${JOB_DISPLAY_NAME} #${BUILD_NUMBER}</a> has been built. Took ${BUILD_DURATION}. See the <a href='${BUILD_URL}/console'>output</a>.'
  }
}
Дженкинс, строить, Дженкинс-трубопровод,
Похожие вопросы