#groovy #jenkins #jenkins-cli #groovy-console #jenkins-scriptler
#groovy #Дженкинс #jenkins-cli #groovy-консоль #дженкинс-скриптлер
Вопрос:
У меня есть требование в Дженкинсе, в котором,
- У нас есть, например, 10 заданий в представлении ABC с определенной конфигурацией.
- Теперь мне нужно создать новое представление в Jenkins XYZ и клонировать все задания в ABC с другим именем и изменить конфигурацию, например URL SCM.
Я наткнулся на сценарий groovy, который мог бы это сделать, но я мало что знаю о groovy
https://wiki.jenkins-ci.org/display/JENKINS/Clone all projects in a View
Мы создаем новые ветки (новые URL-адреса) для каждого выпуска. Таким образом, задания в представлении ABC необходимо скопировать в XYZ с разными именами и обновленными URL-адресами. Я не хочу тратить время на создание каждого задания по отдельности с другим именем, а затем добавлять их в представление XYZ
Любая помощь будет высоко оценена.
Комментарии:
1. В чем вопрос? Чего не делает этот скрипт?
2. Я не знаком с groovy. Поэтому я не смог понять определенные переменные, например, def str_view = «MyProduct_Release_1.0» def str_search = «Rel_1.0» def str_replace = «Rel_1.1″….
3. Я хочу создать новое представление (XYZ), скопировать задания из существующего представления ABC в XYZ с другим именем задания. Вот и все. Я считаю, что этот сценарий groovy должен это делать, но не уверен в полях в скрипте.
4. Только что обнаружил, что скрипт создает новое задание из существующего задания в том же самом представлении. Требуется создать новое представление, а затем скопировать задания в это представление с другим именем задания
Ответ №1:
Вы можете использовать плагин папок, и тогда вам не нужно изменять имена заданий или управлять представлениями.
Для копирования заданий из одной папки в другую вы можете использовать интерфейс ssh cli, подобный этому.
ssh -l USERNAME MYjenkins:port copy-job /OLD/job1 /NEW/job1
ssh -l USERNAME MYjenkins:port copy-job /OLD/job2 /NEW/job2
ПРИМЕЧАНИЕ: некоторые ssh-клиенты не поддерживают «:port» и вместо этого требуют такой команды:
ssh -l USERNAME -p PORT MYjenkins copy-job /OLD/job1 /NEW/job1
Если не используются папки, вы можете автоматизировать создание новых заданий и представлений из существующих заданий следующим образом:
ssh -l USERNAME MYjenkins:port create-view NEW-VIEW
ssh -l USERNAME MYjenkins:port copy-job jobN NEW_jobN
ssh -l USERNAME MYjenkins:port add-job-to-view NEW-VIEW NEW_jobN
Пожалуйста, обратитесь к Cloudbees CLI для получения информации о том, как настроить пользовательские ключи и как определить и настроить правильный используемый порт.
Вы даже можете копировать задания из одного экземпляра Jenkins в другой, извлекая config.xml затем создайте новое задание с этим XML следующим образом:
ssh -l USERNAME MYJenkins:port get-job AJOB > AJOB.xml
ssh -l USERNAME MYOTHERJenkins:port2 create-job AJOB < AJOB.xml
Последний совет: попробуйте ssh -l USERNAME MYJenkins:port help
или ssh -l USERNAME MYJenkins:port help create-job
Чтобы получить некоторые подсказки о синтаксисе и доступных командах.
Комментарии:
1. ПРИМЕЧАНИЕ: При копировании из одного Jenkins в другой возникает много других соображений, например, имеет ли целевой jenkins те же плагины и соответствующую конфигурацию: такие элементы, как учетные данные, переменные среды и тому подобное.
Ответ №2:
Для этого можно использовать jenkins job dsl, который также содержит интерфейс для создания представлений
Вы можете повторять задания в своем представлении с помощью этого
http://<your jenkins server>:<your jenkins port if its not on 80>/view/<your view>/api/json
затем клонируйте задания с помощью команды job
job{
name 'new name'
using 'original name'
//other configuration
}
Все это закодировано в groovy как этап сборки в отдельном задании. У вас даже могут быть параметры для присвоения имени представлению и заданиям или для удаления их из SCM
ОТРЕДАКТИРУЙТЕ хороший вопрос. Я реализовал это так
просмотр именованного TemplateView
задания, называемые templateJobA, templateJobB и т. Д
def templateJobsURL = new URL("http://jenkins-server:8080/view/templateView/api/json")
def templateJobs = new groovy.json.JsonSlurper().parse(templateJobsURL.newReader())
def newJobs = []
templateJobs.jobs.each {
def templateName = it.name
def newName = templateName.replaceAll('template','new')
job {
name newName
using templateName
}
newJobs.push(newName)
println templateName ' ' newName
}
view(type: ListView) {
name('new')
description('All jobs for project A')
jobs {
newJobs.each{
names (it)
println 'view add ' it
}
}
columns {
status()
weather()
name()
lastSuccess()
lastFailure()
lastDuration()
buildButton()
}
}
Комментарии:
1. У меня 120 заданий под представлением. Я хотел бы иметь возможность копировать конфигурации этих заданий в другом представлении с разными именами заданий, когда у нас есть новая ветка. Есть ли способ автоматизировать это. Одним из способов было бы перейти в домашний каталог jenkins, скопировать задания, а затем config.xml
2. Могу ли я узнать, что здесь должно быть определено. Я в замешательстве: templateJobs.jobs.each { def TemplateName = it.name определение newName = TemplateName.replaceAll(‘шаблон’,’новый’) задание { назовите новое имя, используя TemplateName @KeepCalmAndCarryOn
3. Привет, я пытался использовать предоставленный вами вариант, но не справился. Не могли бы вы мне помочь, я запутался в определенных параметрах. Пожалуйста, дайте мне знать, где определить следующее:
4. Существующий вид- Задания XYZ в разделе XYZ—sample-1, foobar-1, fifa-1
5. Требуется новый вид — ABC требует создания заданий из XYZ в качестве sample-2, foobar-2 и fifa-3 В принципе, 1 необходимо заменить на 2.