Интеграция на 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: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 ключ. За това са написани много статии. За пример можете да погледнете. тук.
Генерираните ключове изглеждат приблизително така:
Интеграция на AppCenter и GitLab

Напред секретен ключ трябва да бъде добавен като променлива на GitLab. За това отиваме в Settings > CI/CD > Environment 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 git@bitbucket.org

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' не се разпознава като вътрешна или външна команда.

Проблемът възниква, тъй като пътят към ssh-keygen.exe не е добавен в променливите на средата.
Има два варианта: добавете C:Program FilesGitusrbin в променливите на средата (ще се приложи след рестартиране на машината) или стартирайте конзолата от тази директория.

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' не се разпознава като вътрешна или външна команда.

Използвайте вместо командата

  - eval $(ssh-agent -s)

Командата:

  - ssh-agent

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

AppCenter Build се опитва да стартира билд за проекта от неактуален BitBucket репозиторий.

В моя случай проблемата възникна поради факта, че работех с няколко акаунта. Реших проблема, като изчистих кеша.

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster