Интеграция AppCenter и GitLab

Трям, здравствуйте!

Хочу рассказать о своём опыте настройки интергации GitLab и AppCenter через BitBucket.

Необходимость такой интеграции возникла в ходе настройки автоматического запуска UI тестов для кроссплатформенного проекта на Xamarin. Подробный туториал под катом!

* Об автоматизации UI тестирования в условиях кроссплатформенности сделаю отдельную статью, если публика заинтересуется.

Подобного материала нарыла только одну статью. Поэтому моя статья может кому-нибудь помочь.

Задача: Настроить автоматический запуск UI тестов на AppCenter при том, что наша команда использует GitLab как систему контроля версий.

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

Шаги

1. Создаём пустой репозиторий на BitBucket

Не вижу необходимости описывать это подробнее 🙂

2. Настраиваем GitLab

Нам нужно, чтобы при push/merge в репозиторий изменения заливались еще и на BitBucket. Для этого добавляем runner(или редактируем существующий .gitlab-ci.yml файл).

Cначала добавляем команды в секцию before_scripts

 - git config --global user.email "user@email"
 - git config --global user.name "username"

Потом добавляем следующую команду в нужный stage:

- git push --mirror https://username:[email protected]/username/projectname.git

В моём случае получился вот такой файл

before_script:
 - git config --global user.email "user@email"
 - git config --global user.name "username"

stages:
  - mirror
mirror:
  stage: mirror
  script:
    - git push --mirror https://****:*****@bitbucket.org/****/testapp.git

Запускаем билд, проверяем, что на BitBucket легли наши изменения/файлы.
* как показала практика, настройка SSH ключей необязательна. Но, на всякий случай, приведу алгоритм настройки соединения именно через SSH ниже

Подключение через SSH

Сначала нужно сгенерировать SSH ключ. Об этом написано множество статей. Для примера можете посмотреть тут.
Сгенерированные ключи выглядят примерно так:
Интеграция AppCenter и GitLab

Далее секретный ключ нужно добавить как переменную на GitLab. Для этого идем в Settings > CI/CD > Enviroment Variables. Добавляем ВСЁ содержимое файла, в который вы сохранили секретный ключ. Назовём переменную SSH_PRIVATE_KEY.
* этот файл, в отличие от файла с открытым ключем, не будет иметь расширения
Интеграция AppCenter и GitLab

Отлично, дальше нужно добавить открытый ключ на BitBucket. Для этого открываем репозиторий, переходим в Settings > Access Keys.

Интеграция AppCenter и GitLab

Тут наживаем Add Key и вставляем содержимое файла с публичным ключем (файл с расширением .pub).

Следующим шагом будет использование ключей в gitlab-runner. Используйте эти команды, но укажите вместо звёздочек свои данные

image: timbru31/node-alpine-git:latest

stages:
  - mirror

before_script:
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  - ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts
  - git config --global user.email "*****@***"
  - git config --global user.name "****"
  - ssh -T [email protected]

mirror:
  stage: mirror
  script:
    - git push --mirror https://****:****@bitbucket.org/*****/*****.git

3. Настройка AppCenter

Создаём новое приложение на AppCenter.

Интеграция AppCenter и GitLab

Указываем язык/платформу

Интеграция AppCenter и GitLab

Далее заходим в секцию Build только что созданного приложения. Выбираем там BitBucket и репозиторий, созданный на этапе 1.

Отлично, теперь нужно настроить билд. Для этого находим иконку шестеренки

Интеграция AppCenter и GitLab

В принципе, там всё интуитивно понятно. Выбираем проект и конфигурацию. При необходимости включаем запуск тестов после билда. Они будут запускаться автоматически.

В принципе, на этом всё. Звучит несложно, но, естественно, гладко всё не пройдёт. Поэтому опишу некоторые ошибки, с которыми я столкнулась во время работы:

‘ssh-keygen’ is not recognized as an internal or external command.

Возникает и-за того, что путь к ssh-keygen.exe не добавлен в переменные окружения.
Варианта два: добавьте C:Program FilesGitusrbin в Enviroment Variables (применится после перезагрузки машины), или запускайте консоль из этой директории.

AppCenter подключился не к тому BitBucket аккаунту?

Для решения проблемы нужно отвязать аккаунт BitBucket от AppCenter. Заходим в неправильный BitBucket аккаунт, идем в профиль пользователя.

Интеграция AppCenter и GitLab

Далее переходим в Settings > Access Management > OAuth

Интеграция AppCenter и GitLab

Нажимаем Revoke, чтобы отвязать аккаунт.

Интеграция AppCenter и GitLab

После этого нужно залогиниться под нужным BitBucket аккаунтом
* В крайнем случае еще и почистить кэш браузера

Теперь переходим в AppCenter. переходим в секцию Build, нажимаем Disconnect BitBucket account

Интеграция AppCenter и GitLab

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

‘eval’ is not recognized as an internal or external command

Используем вместо команды

  - eval $(ssh-agent -s)

Команду:

  - ssh-agent

В некоторых случаях придётся или указать полный путь к C:Program FilesGitusrbinssh-agent.exe, или добавить этот путь в системные переменные на машине, где запущен runner

AppCenter Build пытается запустить билд для проекта из неактуального bitBucket репозитория

В моём случае проблема возникла из-за того, что я работала с несколькими аккаунтами. Решилась очисткой кэша.

Источник: habr.com

Добавить комментарий