файл дженкинса для автоматического определения ветви gitlab

#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 будет доступна в случае многоотраслевого конвейера.