Хобрук: Ваш путь к мастерству в программировании

Какие методы есть в Jenkins jobs.scripts.WorkflowScript

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

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

Как получить канал из WorkflowScript? Где я могу найти справочник по API для WorkflowScript.

Что я уже выяснил, так это то, что я получаю все каналы экземпляра этим кодом

 println Jenkins.instance.slaves
 for(def slave : Jenkins.instance.slaves){
     println slave.channel        
 }

Но как узнать, в каком экземпляре работает мой скрипт?

Какие-либо предложения? Указатели на API или обходной путь для моей проблемы.

Благодарю вас


  • Почему вы хотите сделать это в Jenkinsfile? Чего вы пытаетесь достичь в целом? Почему вы не можете использовать существующие функции node шага и sh? Для меня этот вопрос звучит как проблема XY. 08.12.2017
  • На самом деле я пытаюсь запустить настроенный (Apache) веб-сервер на клиенте Jenkins. Для этого мне нужно изменить файл https.conf перед запуском веб-сервера. Я предпочитаю использовать классы groovy, а не команду sh/bat, потому что я лучше знаком с groovy и знаю, что лучше тестировать классы groovy, чем собственно команды sh/bat. 09.12.2017

Ответы:


1

Это (дерьмовое) решение, которое я придумал.

Я написал себе класс Util, чтобы получить канал для метки, которую я использовал для работы.

import jenkins.model.Jenkins
import hudson.FilePath
import hudson.remoting.Channel    
/**
 * returns the channel of the given label, might be null 
 * 
 * realy bad solution why: when multiple JenkinsSlaves have the same label, this will probably not work anymore, 
 * because the channel of the first node is returned
 * For empty labels it does not work either
 * @param jenkins the jenkins instance
 * @param label the associated label for the running node, not empty, not null
 * @return a channel of a Node associated with given label, might be null 
 */
@com.cloudbees.groovy.cps.NonCPS
public static Channel getChannel(Jenkins jenkins, String label) {
    assert jenkins !=null : 'JenkinsUtil.getChannel() does not work for null Jenkins'
    assert label!=null : 'JenkinsUtil.getChannel() does not work for null Labels'
    assert !label.isEmpty() : 'JenkinsUtil.getChannel() does not work for empty Labels' 
    Set<Node> nodes = jenkins.getLabel(label).getNodes()
    assert nodes.size() < 2 : 'JenkinsUtil.getChannel() might not work correctly for Label which are associated with multiple nodes. Fix Me!'
    assert nodes.size() > 0 : "JenkinsUtil.getChannel(): No node found for Label ${label}"
    return nodes[0].getChannel()
}

С помощью этого канала я теперь могу создать файл на удаленной машине.

FilePath remoteWorkspace = new FilePath(JenkinsUtil.getChannel(Jenkins.instance,LABEL_STRING), env.WORKSPACE)
FilePath webserverConfiguration = new FilePath( remoteWorkspace, 'webserver.conf')
webserverConfiguration.write('someText', null)

Почему я сделал так: переменная build недоступна в WorkkflowScript.

12.12.2017
Новые материалы

Что такое гибкие методологии разработки программного обеспечения
Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

Ториго  — революция в игре Го
Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

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

Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..

Как реализовать линейную регрессию в JavaScript
Узнайте, как реализовать линейную регрессию в JavaScript с помощью ML.js Линейная регрессия — это метод машинного обучения, используемый для моделирования связи между зависимой переменной и..