Руководство. Использование служба хранилища Azure для артефактов сборки

Важно!

Многие службы Azure используют подключаемые модули Jenkins. Поддержка некоторых таких подключаемых модулей будет прекращена 29 февраля 2024 г. В настоящее время для интеграции Jenkins со службами Azure рекомендуется использовать Azure CLI. Дополнительные сведения см. в статье Подключаемые модули Jenkins для Azure.

В этой статье демонстрируется использование хранилища BLOB-объектов в качестве репозитория для артефактов сборки, созданных решением непрерывной интеграции Jenkins, или в качестве источника скачиваемых файлов для процесса сборки. Одним из сценариев, где это может оказаться полезным, является программирование в гибкой среде разработки (с помощью Java или других языков), сборка выполняется на основе непрерывной интеграции, и вам требуется репозиторий для артефактов построения, чтобы можно было, например, использовать их совместно с другими членами организации, вашими клиентами или вести архив. Еще один сценарий связан с ситуацией, когда задание построения само требует других файлов, например, зависимостей для загрузки в качестве входа построения.

Необходимые компоненты

Для выполнения Azure CLI требуются учетные данные Azure.

  1. Перейдите на портал Jenkins.

  2. В меню выберите пункт Manage Jenkins (Управление Jenkins).

  3. Выберите элемент Manage Credentials (Управление учетными данными).

  4. Выберите глобальный домен.

  5. Щелкните Добавление учетных данных.

  6. Заполните обязательные поля:

    • Тип: выберите имя пользователя с паролем.
    • Имя пользователя: укажите appId субъект-службу.
    • Пароль. Укажите password субъект-службу.
    • Идентификатор: укажите идентификатор учетных данных, например azuresp.
    • Описание. При необходимости включите понятное описание среды.
  7. Нажмите кнопку ОК, чтобы создать учетные данные.

Создание задания конвейера для отправки артефактов сборки

Ниже приведены пошаговые инструкции по созданию задания конвейера. В рамках задания конвейера создается несколько файлов, затем они отправляются в учетную запись хранения с помощью Azure CLI.

  1. На панели мониторинга Jenkins выберите элемент New Item (Новый элемент).

  2. Присвойте заданию имя myjob, выберите элемент Pipeline (Конвейер) и нажмите кнопку ОК.

  3. В разделе Pipeline (Конвейер) в конфигурации задания выберите элемент Pipeline script (Скрипт конвейера) и вставьте приведенный ниже текст в поле Script (Скрипт). Измените заполнители, используя значения для своей среды.

    pipeline {
      agent any
      environment {
        AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999'
        AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999'
        AZURE_STORAGE_ACCOUNT='myStorageAccount'
      }
      stages {
        stage('Build') {
          steps {
            sh 'rm -rf *'
            sh 'mkdir text'
            sh 'echo Hello Azure Storage from Jenkins > ./text/hello.txt'
            sh 'date > ./text/date.txt'
          }
    
          post {
            success {
              withCredentials([usernamePassword(credentialsId: 'azuresp', 
                              passwordVariable: 'AZURE_CLIENT_SECRET', 
                              usernameVariable: 'AZURE_CLIENT_ID')]) {
                sh '''
                  echo $container_name
                  # Login to Azure with ServicePrincipal
                  az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                  # Set default subscription
                  az account set --subscription $AZURE_SUBSCRIPTION_ID
                  # Execute upload to Azure
                  az storage container create --account-name $AZURE_STORAGE_ACCOUNT --name $JOB_NAME --auth-mode login
                  az storage blob upload-batch --destination ${JOB_NAME} --source ./text --account-name $AZURE_STORAGE_ACCOUNT
                  # Logout from Azure
                  az logout
                '''
              }
            }
          }
        }
      }
    }
    
  4. Выберите элемент Build Now (Выполнить сборку), чтобы запустить myjob.

  5. Изучите выходные данные в консоли для определения состояния. Когда с помощью действия после сборки отправляются артефакты сборки, сообщения о состоянии для службы хранилища Azure записываются в консоль.

  6. Если возникла ошибка, аналогичная следующей, это означает, что необходимо предоставить доступ на уровне контейнера: ValidationError: You do not have the required permissions needed to perform this operation. если вы получите это сообщение об ошибке, ознакомьтесь со следующими статьями, чтобы устранить следующее:

  7. После успешного завершения задания можно просмотреть артефакты сборки, открыв общедоступный большой двоичный объект:

    1. Войдите на портал Azure.
    2. Выберите Хранилище.
    3. Щелкните имя учетной записи хранения, используемой для решения Jenkins.
    4. Выберите Контейнеры.
    5. Выберите контейнер с именем myjobв списке больших двоичных объектов.
    6. Должна отобразиться два файла: hello.txt и date.txt.
    7. Скопируйте URL-адрес любого из них и откройте его в браузере.
    8. Отобразится текстовый файл, который был загружен в качестве артефакта сборки.

    Основные моменты:

    • Имена контейнеров и BLOB-объектов в хранилище Azure отображаются строчными буквами (и с учетом регистра).

Создание задания конвейера для скачивания элементов из Хранилища BLOB-объектов Azure

В следующих шагах показано, как настроить задание конвейера для скачивания элементов из Хранилища BLOB-объектов Azure.

  1. В разделе Pipeline (Конвейер) в конфигурации задания выберите элемент Pipeline script (Скрипт конвейера) и вставьте приведенный ниже текст в поле Script (Скрипт). Измените заполнители, используя значения для своей среды.

    pipeline {
      agent any
      environment {
        AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999'
        AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999'
        AZURE_STORAGE_ACCOUNT='myStorageAccount'
      }
      stages {
        stage('Build') {
          steps {
            withCredentials([usernamePassword(credentialsId: 'azuresp', 
                            passwordVariable: 'AZURE_CLIENT_SECRET', 
                            usernameVariable: 'AZURE_CLIENT_ID')]) {
              sh '''
                # Login to Azure with ServicePrincipal
                az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                # Set default subscription
                az account set --subscription $AZURE_SUBSCRIPTION_ID
                # Execute upload to Azure
                az storage blob download --account-name $AZURE_STORAGE_ACCOUNT --container-name myjob --name hello.txt --file ${WORKSPACE}/hello.txt --auth-mode login
                # Logout from Azure
                az logout
              '''   
            }
          }
        }
      }
    }
    
  2. После сборки проверьте выходные данные консоли журнала сборки. Кроме того, можно просмотреть расположение для скачивания, чтобы узнать, были ли успешно скачаны нужные большие двоичные объекты.

Следующие шаги