Как прочитать файл yaml из мастера, используя сценарий конвейера Jenkinsfile, когда задание jenkins выполняется на подчиненной машине? - PullRequest
1 голос
/ 30 марта 2020

Я строю общую библиотеку (я не инженер по КИ) для конвейера Jenkins. Как часть этого, мы подумываем предоставить конфигурации в файле yaml, и сценарий конвейера Jenkinsfile будет считан из файла yaml.

Итак, мы планируем зафиксировать файл Jenkinsfile и файл yaml в одном репозитории git ( скажем, репо А), и задание будет выполняться на ведомой машине с использованием другого репозитория git (скажем, репо В). После клонирования репозитория A. Jenkinsfile будет выполнен из мастера. Файл yaml также находится в главной рабочей области. В ведомом устройстве репозиторий B будет клонирован, и будет выполняться сборка, как определено в Jenkinsfile. Но у меня возникает вопрос: как мне прочитать файл yaml из сценария Jenkinsfile без необходимости клонировать репо A в подчиненном, т. Е. Как я могу ссылаться на файл, присутствующий в master, а не в slave из Jenkinsfile? Этот вопрос возникает потому, что любой файл, который я пытаюсь открыть, открывается от ведомого устройства, а не от главного.

Заранее спасибо.

РЕДАКТИРОВАТЬ: Что-то, что я забыл упомянуть. Мы на самом деле думали об использовании sta sh от master и unsta sh в slave. Но проблема в том, что мы выполняем только рабочие конфигурации, а среда предоставляется нам какой-то другой командой, которая также предоставляет многим другим командам. Из-за этого у мастера редко бывают свободные исполнители. Таким образом, даже когда мы запускаем работу, она зависает в ожидании освобождения мастера. Есть ли другой способ загрузить файл yaml, когда скрипт конвейера загружается в память мастера?

1 Ответ

1 голос
/ 30 марта 2020

Я думаю, что самый простой способ - использовать stash. Тайники - это временные пакеты, которые могут быть созданы на одном узле и скопированы на любой другой узел.

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

node('master') {
    // Create temporary stash package on master
    stash name: 'MyConfiguration', includes: 'SomeFile.yaml'
}

node('MySlave') {
    // Copy to and extract the stash package on slave
    unstash 'MyConfiguration'
}

Это предполагает, что SomeFile.yaml будет находиться в рабочей области на ведущем устройстве, а также будет извлекать его в рабочее пространство на ведомом устройстве. Если вам нужен подкаталог WORKSPACE, просто оберните шаги stash и / или unstash в шаг dir.

...