jenkinsfile для автоматического определения ветки gitlab - PullRequest
0 голосов
/ 01 апреля 2019

Вот мой сценарий, у меня есть две ветви в gitlab, "master" и staging.

Мне нужно объединить jenkinsfile так, чтобы я мог использовать один и тот же файл как для staging, так и для master-ветви, но мне нужновыполнить разные наборы действий для каждой ветви

, что я пытаюсь сделать, если передача тега зафиксирована для размещения ветви jenkins создаст файл docker, загрузит его в aws ecr и запустит новый экземпляр docker впромежуточный кластер aws ecs и, если тег вставить в основную ветку, он развернет его в другом работающем кластере.

Я использовал проект "JENKINS PIPELINE" и написал приведенный ниже код в 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       = ""
      }

при использовании конвейерного проекта "JENKINS MULTIBRANCH" он сканировал проект и автоматически идентифицировал все ветви, но кажется, что каждая ветвь имеет свой собственный webhook.

Ядействительно перепутал с MULTIBRANCH JENKINS.Должны ли мы настроить 2 разных webhook в gitlab?один для постановки, а другой для мастера?Дженкинс потянет и автоматически переключится на промежуточную ветвь, когда мы сделаем push тега git на промежуточную ветвь в gitlab?

похоже, когда мы делаем push метку на промежуточную ветку в gitlab, jenkinsизвлекает файл jenkins из промежуточной ветви, но обрабатывает файлы в главной ветви.

есть ли какой-нибудь способ, которым мы можем использовать проект "JENKINS PIPELINE" вместо "MULTI BRANCH"?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Вы можете использовать функцию "равно" вместо оператора "==" 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 будет доступна в случае многоотраслевого конвейера.

0 голосов
/ 01 апреля 2019

Похоже, на GitLab это не env.BRANCH_NAME, а CI_COMMIT_REF_NAME.

https://docs.gitlab.com/ee/ci/variables/#predefined-environment-variables

Один трюк, который я использовал для проверки переменных среды в Jenkinsfile, - это запуститькоманда сценария оболочки для отображения вашей среды.Например, sh printenv (при условии, что ваш агент сборки Jenkins основан на Linux)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...