Настройте конвейер для создания приложения для Android и запуска модульных тестов с помощью Azure за несколько минут.

Продолжая тему непрерывной интеграции (CI), которую я начал здесь, в этом посте мы увидим, как мы можем создать наше приложение и удаленно запускать модульные тесты с помощью конвейера в Azure.

Через несколько дней я собираюсь написать еще одну статью, но сосредоточусь на непрерывном развертывании (CD), чтобы вы могли автоматизировать свои загрузки в Firebase App Distribution и Google Play Store, так что следите за новостями.

В Azure конвейеры создаются с использованием файлов .yml, в которых настраивается часть установки и определяются этапы конвейера.

Конвейерный код

В Azure и в большинстве сервисов CI/CD, которые вы можете найти, нам нужно указать, что будет запускать конвейер, где мы хотим его выполнить с точки зрения операционной системы и каковы будут шаги для трубопровод, чтобы следовать.

Мы рассмотрим каждый раздел по отдельности, а затем закончим полным примером.

Курок

С триггерами вы можете добиться множества настроек.

Например, вы можете запускать сборки по расписанию, благодаря Cron. В этом примере конвейер будет запускаться в 22:00 каждый день с содержимым файла develop.

schedules:
  - cron: '0 22 * * *'
    displayName: 'Nightly build'
    branches:
      include:
        - develop

Для большинства из нас то, что вы, вероятно, хотели бы запустить, — это запустить конвейер, когда вы сливаете запрос на включение в ветвь develop или когда вы хотите выпустить новую версию в рабочую среду после слияния с основной/основной.

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

trigger:
  - develop

Бассейн

Пул — это то, что сообщит Azure, где вы хотите выполнить свой конвейер. Для Android мы могли бы использовать машины на базе Linux, но если вы создаете приложение для iOS, вам придется выбрать опцию macOS.

pool:
  vmImage: 'ubuntu-latest'

Шаги

Для Android здесь мы запускаем задачи Gradle или сценарии bash, которые наш конвейер будет выполнять последовательно.

Первое, что нужно сделать, это проверить репозиторий Git. Поскольку конвейер находится внутри репо, мы можем сделать это так. Подробнее об опциях этой команды можно прочитать здесь.

steps:
  - checkout: self
    persistCredentials: true
    clean: true

После этого мы можем начать запускать задачи Gradle. В следующем примере я создаю все варианты приложения для Android, а затем запускаю модульные тесты для каждого из них.

- task: Gradle@2
    displayName: 'Build app and run unit tests'
    inputs:
      gradleWrapperFile: 'gradlew'
      options: '--stacktrace'
      tasks: 'clean assemble testPreDebug testProRelease'
      publishJUnitResults: true
      javaHomeOption: 'JDKVersion'
      sonarQubeRunAnalysis: false
      sqGradlePluginVersionChoice: 'build'

Каждый шаг будет отображаться при выполнении конвейера, переменная displayName будет определять имя отображаемого шага.

После этого в переменной inputs мы запускаем Gradle, как если бы мы делали это локально. Вы можете сделать это с помощью обычного сценария bash, но вместо использования задачи Gradle@2 вы должны использовать задачу CmdLine@2, а затем в поле ввода вы можете запустить такой сценарий.

# For a bash script
- task: CmdLine@2
    displayName: 'Run a script'
    inputs:
      script: |
        # Some bash commands separated by a line jump

# For single line bash commands
- task: Bash@3
    displayName: 'Run bash command'
    inputs:
      targetType: 'inline'
      script: |
        # A bash command

Переменные

Чтобы сохранить свои ключи или другие данные в секрете и использовать их при запуске конвейера, вы можете хранить их в переменных. Это можно сделать в Интернете Azure, когда вы редактируете конвейер, это довольно просто.

Затем, чтобы использовать их, вам просто нужно использовать этот синтаксис $(VARIABLE_NAME).

Полный пример конвейера

Следующий пример запускается при изменениях в ветке develop на компьютере с Linux и выполняет следующие действия.

  1. Оформить репозиторий
  2. Установите имя пользователя, которому будет принадлежать коммит
  3. Оформить ветку и получить любые изменения
  4. Установите Java JDK для использования
  5. Напишите файл local.properties с переменными конвейера
  6. Соберите приложение и запустите модульные тесты
# Android
# Build your Android project with Gradle.
# Add steps that test, sign, and distribute the APK, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/android

trigger:
  - develop

pool:
  vmImage: 'ubuntu-latest'

steps:
  - checkout: self
    persistCredentials: true
    clean: true

  - script: |
      git config --global user.name "MyUsername"
      git config --global user.email "[email protected]"
      git config --global push.followTags true

  - task: CmdLine@2
    displayName: 'Checkout branch'
    inputs:
      script: |
        export branchName=$(echo $(Build.SourceBranch) | cut -c12-)
        git fetch
        git checkout $branchName
        git reset --hard origin/$branchName

  - task: Bash@3
    displayName: 'Use JDK11 by default'
    inputs:
      targetType: 'inline'
      script: |
        echo "##vso[task.setvariable variable=JAVA_HOME]$JAVA_HOMEsystem.collectionIdX64"

  - task: Bash@3
    displayName: 'Config local.properties'
    inputs:
     targetType: 'inline'
     script: |
       echo KEY=$(KEY) > ./local.properties

  - task: Gradle@2
    displayName: 'Build app and run unit tests'
    inputs:
      gradleWrapperFile: 'gradlew'
      options: '--stacktrace'
      tasks: 'clean assemble testPreDebug testProRelease'
      publishJUnitResults: true
      javaHomeOption: 'JDKVersion'
      sonarQubeRunAnalysis: false
      sqGradlePluginVersionChoice: 'build'

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

Разрешения пользователей

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

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

Чтобы узнать, какой пользователь будет запускать конвейер, вы можете перейти к настройкам конвейера, где вы увидите вкладку Переменные. Существует переменная с именем system.collectionId, которую затем можно использовать для поиска пользователя в разделе Управление безопасностью, о котором мы говорили ранее, чтобы знать, кому предоставлять разрешения.

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу