#jenkins #gitlab #jenkins-pipeline #amazon-ecs
#дженкинс #gitlab #дженкинс-конвейер #amazon-ecs
Вопрос:
Вот мой сценарий, у меня есть две ветви в gitlab, «master» и промежуточная.
Мне нужно консолидировать файл дженкинса таким образом, чтобы я мог использовать один и тот же файл как для промежуточной, так и для главной ветви, но для каждой ветви необходимо выполнить другой набор действий
что я пытаюсь сделать, так это то, что если отправка тега привязана к промежуточной ветви, дженкинс создаст файл docker, загрузит его в aws ecr и запустит новый экземпляр docker в промежуточном кластере aws ecs, и если тег отправится в главную ветку, он развернет его в другой действующий кластер.
Я использовал проект «КОНВЕЙЕР ДЖЕНКИНСА» и написал приведенный ниже код в jenkinsfile, но env.BRANCH_NAME всегда возвращает нулевое значение.
if (env.BRANCH_NAME == "staging") {
def serviceName = ""
def taskFamily = ""
def clusterName = ""
} else if (env.BRANCH_NAME == "master") {
def serviceName = ""
def taskFamily = ""
def clusterName = ""
}
при использовании проекта конвейера «ДЖЕНКИНС МУЛЬТИОТРАСЛЕВОЙ» он отсканировал проект и автоматически идентифицировал все ветви, но, похоже, у каждой ветви есть свой собственный веб-хук.
Я действительно запутался с МНОГООТРАСЛЕВЫМ ДЖЕНКИНСОМ. Должны ли мы настроить 2 разных webhook в gitlab? один для промежуточного, а другой для основного? будет ли дженкинс извлекать и автоматически переключаться на промежуточную ветку, когда мы отправим тег git в промежуточную ветку в gitlab?
похоже, что когда мы отправляем тег в промежуточную ветвь в gitlab, дженкинс извлекает файл jenkinsfile из промежуточной ветви, но обрабатывает файлы в главной ветви.
есть ли какой-либо метод, которым мы можем использовать проект «КОНВЕЙЕР ДЖЕНКИНСА» вместо «МУЛЬТИВЕТВИ»?
Комментарии:
1. Используете ли вы
scripted
илиdeclarative
тип pipeline? В случаеdeclarative
можете ли вы попробовать добавить этот фрагмент кода внутриscript
блока.2. @SunilThorat Я предполагаю, что это декларативный конвейер, можете ли вы вставить код еще раз, поскольку я его не вижу.
Ответ №1:
Похоже, что в GitLab это не так env.BRANCH_NAME
, это CI_COMMIT_REF_NAME
.
https://docs.gitlab.com/ee/ci/variables/#predefined-environment-variables
Один из приемов, который я использовал для проверки переменных среды в файле Дженкинса, заключается в запуске команды сценария оболочки для отображения вашей среды. Например sh printenv
(при условии, что ваш агент сборки Jenkins основан на Linux)
Комментарии:
1. Спасибо, я попробую это.
env.BRANCH_NAME
показывал правильное название ветви (я повторил переменную), когда я использую МНОГООТРАСЛЕВОЕ задание ДЖЕНКИНСА, но тогда условие if не работает.
Ответ №2:
Вы можете использовать функцию «равно» вместо оператора «==» myStringVar.equals(<someOtherValue>)
Ваш случай будет выглядеть как-то:-
if (env.BRANCH_NAME.equals('staging')) {
def serviceName = ""
def taskFamily = ""
def clusterName = ""
} else if (env.BRANCH_NAME.equals('master')) {
def serviceName = ""
def taskFamily = ""
def clusterName = ""
}
Также переменная env.BRANCH_NAME
будет доступна в случае многоотраслевого конвейера.