Представления заданий Дженкинса с разными именами заданий

#groovy #jenkins #jenkins-cli #groovy-console #jenkins-scriptler

#groovy #Дженкинс #jenkins-cli #groovy-консоль #дженкинс-скриптлер

Вопрос:

У меня есть требование в Дженкинсе, в котором,

  1. У нас есть, например, 10 заданий в представлении ABC с определенной конфигурацией.
  2. Теперь мне нужно создать новое представление в 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.