Передача карт в работу трубопровода Jenkins - PullRequest
0 голосов
/ 08 июня 2018

У меня есть Jenkins Job DSL начальное задание, которое вызывает несколько конвейерных заданий, например

pipelineJob("job1") {
    definition {
        cps {
            script(readFileFromWorkspace('job1.groovy'))
        }
        parameters {
            choiceParam('ENV', ['dev', 'prod'], 'Build Environment')
         }
    }
}
pipelineJob("job2") {
    definition {
        cps {
            script(readFileFromWorkspace('job2.groovy'))
        }
        parameters {
            choiceParam('ENV', ['dev', 'prod'], 'Build Environment')
         }
    }
}

job1.groovy и job2.groovy - это стандартный Jenkinsfile стиль конвейеров.

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

Что-то вроде:

def SERVERS_MAP = [
'prod': [
        'prod-server1',
        'prod-server2',
      ],
'dev': [
        'dev-server1',
        'dev-server2',
      ],
]

Могу ли я определить карту в моем начальном задании, которое затем я могу передать и получить доступкак карта в моем конвейере работы?

1 Ответ

0 голосов
/ 08 июня 2018

Я придумал хакерский обходной путь с помощью плагина pipeline-utility-steps .

По сути, я передаю свои карты данных как JSON.

Так что мое начальное задание может содержать:

def SERVERS_MAP = ''' 
{
  "prod": [
    "prod-server1",
    "prod-server2"
  ],
  "dev": [
    "dev-server1",
    "dev-server2"
  ]
}
'''

pipelineJob("job1") {
    definition {
        cps {
            script(readFileFromWorkspace('job1.groovy'))
        }
        parameters {
            choiceParam('ENV', ['dev', 'prod'], 'Build Environment')
            stringParam('SERVERS_MAP', "${SERVERS_MAP}", "")
         }
    }
}

, и мой конвейер будет содержать что-то вроде:

def serversMap = readJSON text: SERVERS_MAP
def targetServers = serversMap["${ENV}"]
targetServers.each { server ->
   echo server
}

Я также мог бы извлечь эти переменные в файл JSON и прочитатьих оттуда.

Хотя это работает, оно как-то не так.

...