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

Напред секретен ключ трябва да бъде добавен като променлива на GitLab. За това отиваме в Settings > CI/CD > Environment 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/*****/*.git3. Настройка на AppCenter
Създаваме ново приложение в AppCenter.

Посочваме езика/платформата.

След това влизаме в секцията Build на току-що създаденото приложение. Избираме там BitBucket и репозитория, създаден на етап 1.
Отлично, сега трябва да настроим билд. За целта намираме иконката на зъбно колело.

По принцип, всичко е интуитивно. Избираме проекта и конфигурацията. При необходимост включваме стартиране на тестове след билда. Те ще се стартират автоматично.
По принцип, това е всичко. Звучи несложно, но, разбира се, всичко не минава гладко. Затова ще опиша някои грешки, с които се сблъсках по време на работа:
'ssh-keygen' не се разпознава като вътрешна или външна команда.
Проблемът възниква, тъй като пътят към ssh-keygen.exe не е добавен в променливите на средата.
Има два варианта: добавете C:Program FilesGitusrbin в променливите на средата (ще се приложи след рестартиране на машината) или стартирайте конзолата от тази директория.
AppCenter не се свързва с неправилния BitBucket акаунт?
За да решите проблема, трябва да отвържете акаунта в BitBucket от AppCenter. Влизате в неправилния BitBucket акаунт и отивате в профила на потребителя.

След това преминаваме в Settings > Access Management > OAuth.

Натискаме Revoke, за да отвържем акаунта.

След това трябва да се логнете с желаното BitBucket акаунт.
* В краен случай, може да се наложи да изчистите кеша на браузъра.
Сега преминаваме в AppCenter. Отново в секцията Build, натискаме Disconnect BitBucket account.

Когато старият акаунт бъде отвързан, свързваме AppCenter отново. Сега вече към желания акаунт.
'eval' не се разпознава като вътрешна или външна команда.
Използвайте вместо командата
- eval $(ssh-agent -s)Командата:
- ssh-agentВ някои случаи ще трябва или да посочите пълния път към C:Program FilesGitusrbinssh-agent.exe, или да добавите този път в системните променливи на машината, на която е стартиран runner.
AppCenter Build се опитва да стартира билд за проекта от неактуален BitBucket репозиторий.
В моя случай проблемата възникна поради факта, че работех с няколко акаунта. Реших проблема, като изчистих кеша.
Източник: habr.com
