Рубрики
Uncategorized

Вручную генерируйте APK с помощью действий GitHub

В этом блоге мы поговорим о том, как мы можем решить задачи выше, вручную генерируя APK, используя действия GitHub. Tagged with GitHub, действия, CICD, Android.

Для более видимости публиковать это на Dev.to. оригинал Статья размещена на моем Веб -сайт Анкет Давайте начнем:)

Были ли вы в ситуации, когда вы хотите проверить функцию из конкретной ветви? Но у вас нет окружающей среды в местном уровне? Или вы где -то нет и у вас нет доступа к компьютеру? Или ваш клиент/QA все время пингирует, чтобы предоставить APK конкретную конфигурацию и функции?

В этом блоге мы поговорим о том, как мы можем решить задачи выше, вручную генерируя APK, используя действия GitHub. Итак, начнем.

  1. Действия GitHub.
  2. Основное понимание сборки Android с использованием Градл Анкет
  3. Основной из Bash сценарий.

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

  1. Инди -разработчик:
    • Если вы инди -разработчик, работающий исключительно над проектом, то вы можете быть поражены этим подходом. Причина может быть
      1. Меньше зависимостей людей на вас.
      2. У вас есть среда в вашем местном уровне.
      3. Никто не просит APK тестировать ежедневно.
    • Вы можете пропустить всю эту статью. Но хорошо знать об этом подходе, потому что в конечном итоге размер вашей команды будет расти, и вам нужно быть хорошо подготовленным для него.
  2. Настройка среды:
    • Скажем, наш нетехнический клиент хочет проверить функцию в среде, которую мы подтолкнули в определенную ветвь. Есть два решения для этого.
      1. Позвоните разработчику и попросите APK с необходимыми параметрами.
      2. Настройте среду Android в локальной машине клиента, ознакомьтесь с ветвью, настройте параметры и создайте APK. (Я не думаю, что нетехническому клиенту понравится это решение)
    • Мы можем избежать этого, предоставив графический интерфейс для создания APK с настраиваемыми параметрами. Это именно то, что делает пользовательский интерфейс рабочего процесса. ( Подробнее об этом следующем разделе)
    • Та же самая проблема, упомянутая выше, также может быть применена к QA. Основное различие в том, что QA технически звучит. Они могут получить APK, используя GitHub Trigger, например Push, Pull_Request и т. Д. Проблема здесь заключается в том, почему создать этот ненужный триггер запроса Push and Pull, чтобы просто генерировать APK. Это загромождает историю GIT и ненужные запросы PR.
  3. Конфигурируемость:
    • Возможность создания APK с настроенными параметрами — это то, что я нахожу очень полезным. Наиболее распространенные параметры, которые мы настраиваем в приложениях.
      1. API конечные точки
      2. Секретные/доступ к клавишам.
      3. Другие бизнес -параметры, такие как пороговые значения, количество попыток Re. и т.п.

Github Actions предоставляет различные события триггеров для запуска вашего рабочего процесса. Ниже приведен пример некоторых из спусковых событий, таких как выдвижение коммита в основной ветви, создание запросов на притяжение, теги и т. Д.

on:
  # Trigger the workflow on push or pull request,
  # but only for the main branch
  push:
    branches:
      - main

  pull_request:
    branches:
      - main

    branches:    
      # Push events on main branch
      - main
      # Push events to branches matching refs/heads/mona/octocat
      - 'mona/octocat'
      # Push events to branches matching refs/heads/releases/10
      - 'releases/**'

    tags:        
      - v1             # Push events to v1 tag
      - v1.*

Чтобы запустить событие вручную, действия GitHub добавили новое событие триггера под названием workflow_dispatch. Ниже приведен пример кода и пользовательского интерфейса. (Подробнее в следующем разделе)

on: 
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log level'     
        required: true
        default: 'warning'
      tags:
        description: 'Test scenario tags' 

Сначала нам нужно настроить настраиваемые параметры в Android, а затем мы можем обновить эти параметры, используя входы GitHub в рабочем процессе. Так что начнется с Android сначала.

Настраиваемые свойства в Android.

  1. Нам нужно настроить настраиваемые параметры в файле. В этом случае мы вкладываем это в local.properties Файл, который мы обычно Не регистрируйтесь ВК. Примечание: Это может быть любой файл. Мы просто чтобы указать на этот файл в Build.Gradle Анкет
  2. Создать или обновить local.properties файл как это Анкет

  3. Обновление Build.Gradle в приложении, как это Анкет

  4. Мы можем направить локальные свойства, используя BUILDCONFIG в этом приложении, как это.

    Примечание: Иногда local.properties Не создавайте BUILDCONFIG на синхронизации. Он будет создан, когда мы строим APK. Рефери

  5. Вывод будет выглядеть так, когда мы запускаем APK.

Если вы сталкиваетесь с какими -либо проблемами. Вы можете проверить приложение для примера рабочего процесса Здесь Анкет Для установки local.properties Пожалуйста, проверьте это Mindork блог.

Настройка GitHub Workflow

Мы создаем файл yaml внутри .github/Workflow папка. Чтобы запустить рабочий процесс вручную, мы будем использовать workflow_dispatch как триггер. Это покажет пользовательский интерфейс рабочего процесса, который мы видели выше.

name: Manual Generate APK
on:
  workflow_dispatch:
    /....

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

name: Manual Generate APK
on:
  workflow_dispatch:
    inputs:

      baseUrl:
        description: 'Base URL'
        required: true
        default: 'https://production.example.com/api/v1'

      mapKey:
        description: 'Map Key'
        required: true
        default: 'production_sample_key'

      reAttempt:
        description: 'Number of re-attempts'
        default: '3'

      thresholdValue:
        description: 'Threshold value'
        default: '0.05'

Настройка Требуется параметры как Верно Покажите звездочку, указывающую на обязательное поле. Описание показано как имя поля в пользовательском интерфейсе. по умолчанию Парам установит значение по умолчанию в поле ввода.

Мы добавим команду, чтобы построить APK.

- name: Assemble app debug APK
  run: bash ./gradlew assembleDebug --stacktrace

Настройка скрипта Bash

Если мы попытаемся запустить этот рабочий процесс сейчас, он потерпит неудачу с ошибкой local.properties не найден. Это потому, что мы не зарегистрировали этот файл в наших венчурных капиталах. Мы можем исправить это, создав Local.properties на лету при выполнении рабочего процесса GitHub. Мы можем сделать это, запустив команду Linux в рабочем процессе, который создает local.properties Файл со всеми значениями конфигурации.

Лучше обернуть эту последовательность команды Linux в сценарий Bash. Это позволит избежать кода беспорядка в рабочем процессе и обеспечить большую гибкость для обновления сценария.

Теперь мы создадим и зарегистрируемся в файле сценария Bash update_properties.sh в капельнице, которые будут выглядеть.

#!/bin/bash

touch local.properties
echo "BASE_URL=\"$1\"" >> local.properties
echo "MAP_KEY=\"$2\"" >> local.properties
echo "RETRY_ATTEMPTS=$3" >> local.properties
echo "THRESHOLD_VALUE=$4" >> local.properties

1, 2, 3, 3 долл. США и 4 долл. США являются 4 аргументами, которые будут переданы в сценарий из значений входов.

Нам нужно запустить сценарий Bash с входными значениями, прежде чем построить APK. Мы получаем эти значения, используя github.event.inputs. {key} характеристики. Вы можете найти исходный файл здесь .

- name: Print Params Values
  run: |
          bash update_properties.sh ${{ github.event.inputs.baseUrl }} ${{ github.event.inputs.mapKey }} ${{ github.event.inputs.reAttempt }} ${{ github.event.inputs.thresholdValue }}
- name: Assemble app debug APK
  run: bash ./gradlew assembleDebug --stacktrace

Забавный факт: я смог запустить сценарий после 17 неудачных попыток. Так что не волнуйтесь, если сценарий не работает в первый раз. Держите гугл, как я это сделал 😂

  • Теперь мы можем запустить рабочий процесс с вкладки Ai in Github Action.
  • Если вы хотите обновить существующее local.properties Или любой другой файл, который вы уже используете, вам нужно изменить свой скрипт. Пожалуйста, проверьте это ветвь Например.
  • Пользовательский интерфейс Workflow не появится, если рабочий процесс будет выдвинут в отдельную ветку, но не в Главный/Мастер ответвляться. Рабочий процесс будет виден только в том случае, если его подтолкнут к Главный/Мастер ответвляться.
  • Он не будет работать на ветке, в которой нет рабочего процесса. Пользовательский интерфейс будет выглядеть так.
  • Текст Linux замените sed -i Команда будет работать над действием GitHub, которое работает на Linux. Для Mac нам нужно использовать sed -i ""
  • Иногда local.properties Не создавайте BUILDCONFIG на синхронизации. Он будет создан, когда мы строим APK. Рефери

Запуск GitHub вручную был тем, о чем спросил разработчик, когда было первоначально начато действие. Потому что он обеспечивает большую гибкость и простоту использования, особенно для клиентов/QA. У них также есть API, чтобы вызвать этот рабочий процесс, который открывает дверь для большей автоматизации.

В случае любого вопроса и проблемы вы можете связаться со мной в Twitter Анкет Оставайтесь в курсе, подписываясь на мой блог. Спасибо, что нашли время прочитать эту статью. Если вам нравится эта статья, пожалуйста, нравится и поделитесь ею с друзьями/коллегами и распространите информацию.

  1. https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/
  2. https://blog.mindorks.com/using-local-properties-file-to-avoid-api-keys-check-in-into-version-control-system
  3. https://stackoverflow.com/questions/16745988/sed-command-with-i-option-in-place-editing-works-fine-on-ubuntu-but-not-mac
  4. https://abelsquidhead.com/index.php/2020/07/29/manually-trigger-actions-workflow-in-github-how-did-i-not-know-about-this/
  5. https://github.community/t/workflow-dispatch-event-not-working/128856

Оригинал: «https://dev.to/burhanrashid52/manually-generate-apk-using-github-actions-2c64»