Трям, привіт!
Хочу розповісти про свій досвід налаштування інтергації 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. Про це написано багато статей. Для прикладу можете подивитись
Згенеровані ключі виглядають приблизно так:
Далі секретний ключ потрібно додати як змінну на 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 [email protected]
mirror:
stage: mirror
script:
- git push --mirror https://****:****@bitbucket.org/*****/*****.git
3. Налаштування AppCenter
Створюємо новий додаток на AppCenter.
Вказуємо мову/платформу
Далі заходимо в секцію Build щойно створеної програми. Вибираємо там BitBucket та репозиторій, створений на етапі 1.
Відмінно тепер потрібно налаштувати білд. Для цього знаходимо іконку шестерні
В принципі там все інтуїтивно зрозуміло. Вибираємо проект та конфігурацію. При необхідності вмикаємо запуск тестів після білда. Вони запускатимуться автоматично.
У принципі, у цьому все. Звучить нескладно, але, звичайно, гладко все не пройде. Тому опишу деякі помилки, з якими я зіткнулася під час роботи:
'ssh-keygen' is not recognized як internal або external command.
Виникає через те, що шлях до ssh-keygen.exe не доданий у змінні оточення.
Варіанти два: додайте C:Program FilesGitusrbin до 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 FilesGitusrbinssh-agent.exe, або додати цей шлях до системних змінних машин, де запущений runner
AppCenter Build намагається запустити білд для проекту з неактуального bitBucket репозиторію
У моєму випадку проблема виникла через те, що я працювала з кількома обліковцями. Наважилася очищенням кешу.
Джерело: habr.com