Рубрики
Uncategorized

Дворецкий сделал это! Дженкинс/Джира Трюки и советы

1. Автоматические исправления в Джире Мы используем Bitbucket и Jira. В значительной степени потрясающий atlassian … Помечено с Дженкинсом, Джирой, CICD, DevOps.

1. Автоматические исправления в Джире

Мы используем Bitbucket и Jira. В значительной степени удивительные продукты Atlassian, довольно распространенные в компаниях.

Наш процесс требует от разработчиков перемещать билеты JIRA из Делать столбец в Готов к демонстрации колонка и в конечном итоге переместите их в Готово столбец. Процесс разработки в значительной степени прост. Когда вы начнете работать над историей, вы можете создать филиал из своего терминала. Если вы убедитесь, что имя ветви содержит идентификатор проблемы, когда вы подталкиваете эту ветвь в удаленный репозиторий, даже без изменений Jira может автоматически перемещать его в В прогрессе столбец. Когда мы открываем проводник, Джира автоматически перемещает билет в Обзор кода колонка, и после слияния его перемещается к Исследование В столбце, где другой разработчик или тестер проверяют функциональность, подтверждает, что критерии принятия соответствуют и все в порядке. Оттуда мы перемещаем его в Готов к демонстрации колонка, и в конце итерации мы демонстрируем изменения. Если они приняты владельцем продукта, они перемещены в колонку «Готово», и мы можем запустить сборку релиза.

Теперь единственное, что не автоматизировано в этом процессе, — это то, что мы делаем наши релизы, используя функцию версий JIRA. Когда сборка релиза успешно работает, она помечает фактический коммит с этой версией, зарегистрированной в JIRA. Проблема в том, что мы разработчики, а мы ленивы. Мы всегда забывали добавить последнюю неизданную версию в истории, над которыми мы работали.

И в редких случаях, когда мы не забыли об этом, случилось, что не выпущенная версия билетов в процессе была выпущена, и нам нужно было изменить это вручную, чтобы добавить новую Fixversion. Это было неприемлемо, и, поскольку я оказался разработчиком, который может что -то с этим сделать, я взял на себя возможность автоматизировать эту задачу, используя Джира шаги Плагин и настройте наш Jenkinsfile для запросов на привлечение. Итак, давайте проверим, как это сделать.

В верхней части Jenkinsfile нам нужно настроить некоторые методы и переменные. Поэтому мы работаем над передним дозом нашего приложения, поэтому наши версии релиза всегда начинаются с Фей , например, Fe-2.3.12 . Итак, сначала мы получаем версии Project, а затем используем какую -то Groovy Magic, чтобы получить единственную неизданную версию, которая содержит Fe в его названии. Наконец, мы применяем результат к переменной.

def getFrontEndReleaseVersions() {
  def versions = jiraGetProjectVersions idOrKey: 'YOUR-PROJECT-KEY', site: 'YOUR-CONFIGURED-JIRA-SITE'
  return versions.data.findAll { it.released == false && it.name.contains('FE') }
}

FE_RELEASE_VERSIONS = getFrontEndReleaseVersions()

Итак, Fe_release_versions Переменная теперь содержит список объектов версий. Ну, список ровно одной объекта версии. Затем, когда мы запустим нашу сборку, перед оформлением заказа, мы запускаем сценарий в блоке Try-Catch. Причина, по которой он находится внутри блока Try-Catch, заключается в том, что, когда сайт Jira уходит, но сборка работает, сборка не потерпит неудачу.

pipeline {
  // ...
  stages {
    steps {
      script {
        try {
          def issuekey = (GIT_BRANCH.toUpperCase() =~ /JIRAPROJECTID-\d*/)[0]

          def editedIssue = [fields: [fixVersions: [FE_RELEASE_VERSIONS.first()]]]

          def response = jiraEditIssue idOrKey: issuekey, issue: editedIssue, site: 'YOUR-CONFIGURED-JIRA-SITE'

          echo response.successful.toString()
          echo response.data.toString()
        } catch (Exception e) {
          echo "Could not update fixVersions. Please do it manually"
        }
      }
    }

    // ...
  }
}

Сначала мы называем .touppercase () на Git_branch переменная. Это потому, что некоторые из наших разработчиков любят создавать свои ветви из терминала. Обычно они слишком ленивы, чтобы нажать сдвиг при написании номера выпуска JIRA в имя филиала. После этого мы используем = ~ Оператор для извлечения подстроения с использованием следующего регулятора: /Jiraprojectid- \ d*/ Анкет Используйте письма вашего собственного проекта, и это должно работать для вас. Оператор возвращает массив матчей, и мы получаем первое, используя нотацию с кронштейном. После этого мы определяем переменную с областями, которые мы хотим изменить в нашей проблеме JIRA. И, наконец, мы используем jiraeditissue обновить это в нашей Джире.

2. Пострадавший трубопровод для сборки PR

Еще один проект, над которым я работаю, — редкий деликатес. Задняя часть состоит из нескольких микросервисов Java Springboot. С несколькими фронтальными веществами. Один бэк-офис, один, обращенный к клиенту, с вероятностью изменения требований, в будущем может быть и третий фронт.

Наша проблема заключается в том, что из-за наших ограниченных ресурсов мы не можем запустить передние и задние сборки параллельно. Теперь хорошо, что все тщательно проверено. Что заставляет запасную сборку в течение 17 минут, а передние строительства будут работать еще 14 минут. Это просто слишком много для строительства затягивания.

Первым шагом для сокращения этого времени сборки является то, что мы реализовали наши два интерфейских приложения с использованием NX Workspace. Это привело к уменьшению времени настройки, однако, установил узлы и NPM, а затем запустив npm ci Все еще требуется много, когда есть только изменения. Точно так же строительство трех микросервисов Springboot со всеми их единичными и функциональными тестами занимает некоторое время.

Таким образом, чтобы решить эту проблему, мы придумали идею, чтобы сделать передовые, а на заднем плане кондиционировал строительство. Да, мы имитируем затронут Сборки рабочего пространства NX, но в наших трубопроводах. После небольшого исследования я столкнулся с это Сообщение блога. (Спасибо, мистер Беккер!) Команда, которая позволила бы нам установить наши шаги сборки:

git diff --quiet HEAD origin/master -- web-ui || echo changed

Эта команда состоит из двух частей. Первая часть перед оператором или оператором возвращается с кодом выхода. Если вывод не удастся (ненулевой выездной код), то Эхо будет бежать. Нам нужно две переменные в нашем Jenkinsfile. Fe_is_dirty и Be_is_dirty . Нам нужно определить их на вершине Jenkinsfile, за пределами нашего объявления трубопровода.

def FE_IS_DIRTY
def BE_IS_DIRTY

pipeline { //...

Затем нам нужно присвоить значения этим пустым переменным. Нам нужно запустить Оформление SCM Во -первых, у нас есть фактические изменения, против которых мы можем запустить наши команды. Назначение переменной должно работать внутри сценария.

stage('Init build') {
  steps {
    // ...
    checkout scm
    script {
      FE_IS_DIRTY = sh (
        script: "git diff --quiet HEAD origin/master -- web-ui || echo changed",
        returnStdout: true
      )
      echo "Frontend isDirty: ${FE_IS_DIRTY}"
      BE_IS_DIRTY = sh (
        script: "git diff --quiet HEAD origin/master -- server || echo changed",
        returnStdout: true
      )
      echo "Backend isDirty: ${BE_IS_DIRTY}"
    }
  }
}

Теперь нам просто нужно украсить наши шаги сборки подходящим Когда блокировать:

stage('FE init') {
  when {
    expression { return FE_IS_DIRTY }
  }
  steps {
    sh './gradlew npmInstall'
    sh './gradlew generateGitHash'
  }
}
// ...
stage('BE Unit tests') {
  when {
    expression { return BE_IS_DIRTY  }
  }
  steps {
    echo 'Execute SpringBoot Application unit tets'
    sh './gradlew server:test'
  }
}

Таким образом, когда на заднем плане появляются только изменения, тесты на переднем крае не будут выполняться. Точно так же, когда изменения только включают в себя фронт-конце, шаги заднего строительства не выполняются излишне.

3. Уведомить DevOps

В нашем процессе развертывание в девчонка и тест Окружающая среда автоматическая. Новые изменения немедленно перемещаются в среду разработки, когда происходит мастер -слияние. Каждую ночь в 21:00 Ночная сборка проходит все тесты, строит артефакты и публикует в тест (Постановка) окружающая среда. Развертывание до производства является защищенной частью этого процесса. Только команда DevOps может (и должна) развернуться в производстве.

Процесс заключается в том, что всякий раз, когда должен быть сделан релиз, мы запускаем выпускать Jenkins Job, которая управляет каждым тестом и строит артефакты. Та же версия должна быть на тест окружающая среда и ручные тесты должны работать против этого. После этого нам нужно создать проблему для команды DevOps и отправить уведомление по электронной почте координатору команды DevOps. Как вы уже догадались, плагин Jira Steps приходит на помощь. Создание выглядит как следующее:

    stage('Notify DevOps') {
      steps {
        script {
          try {
            def devopsTicket = [fields: [
                project: [key: 'YOUR_PROJECT_KEY'],
                summary: "Release PROJECT ${params.RELEASE_VERSION} to production",
                description: "See Jenkins job: '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})"
              ]
            ]
            response = jiraNewIssue site: 'https://your.jira.com/' issue: devopsTicket

            echo response.successful.toString()
            echo response.data.toString()

            mail bcc: '', body: "Release
Project: ${env.JOB_NAME}
Build Number: ${env.BUILD_NUMBER}
Build URL: ${env.BUILD_URL}
New version: ${params.RELEASE_VERSION}", cc: '', charset: 'UTF-8', from: 'jenkins@yourcompany.com', mimeType: 'text/html', replyTo: '', subject: "Deploy new release ${params.RELEASE_VERSION}", to: 'devops@devops.com'; } catch (Exception e) { // if for some reason the JIRA ticket could not be created, send a notification to slack or an e-mail // or something that could benefit your process } } } }

Мы вкладываем весь шаг в блок с перепродажкой, поэтому, если что-то не удается во время создания выпуска, может быть отправлено уведомление о запасении. Мы не хотим терпеть неудачу на технике. Поскольку это последний шаг сборки, если обморочное соединение с сервером JIRA не удалось, сборка выпуска, которая является ложной тревогой. В блоке Try мы определяем проблему, которая необходимо создать и заполнять ее доступными данными. Затем мы также можем отправить электронное письмо команде DevOps, чтобы они могли видеть, что эта задача имеет приоритет.

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

Вы можете прочитать оригинальную артисть Здесь Анкет

У вас есть и у вас уловки рукава? Вы можете написать это мне на Твиттер

Оригинал: «https://dev.to/tapaibalazs/the-butler-did-it-jenkins-jira-tricks-and-tips-5c0i»