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


Хочу рассказать о своём опыте настройки интергации 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:password@bitbucket.org/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 ключ. Об этом написано множество статей. Для примера можете посмотреть тут.
Сгенерированные ключи выглядят примерно так:


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


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



Тут наживаем 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 git@bitbucket.org

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

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


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



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



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


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



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


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


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

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


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

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



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



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



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


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



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


'eval' is not recognized as an internal or external command

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


  - eval $(ssh-agent -s)

Команду:


  - ssh-agent

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


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

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

Комментарии (2)


  1. h0use
    18.03.2019 09:37

    А кто такой BitBacket? или Вы имеет ввиду bitbucket.org/product?


    1. AnjaHolosova Автор
      18.03.2019 09:47

      Спасибо, поправила :)