Інтеграція 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).

Спочатку додаємо команди до секції 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 як internal або 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

Додати коментар або відгук