Трям, здравствуйте!
Хочу рассказать о своём опыте настройки интергации 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 ключ. Об этом написано множество статей. Для примера можете посмотреть тут.
Сгенерированные ключи выглядят примерно так:
Далее секретный ключ нужно добавить как переменную на 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.exe не добавлен в переменные окружения.
Варианта два: добавьте C:\Program Files\Git\usr\bin в Enviroment Variables (применится после перезагрузки машины), или запускайте консоль из этой директории.
Для решения проблемы нужно отвязать аккаунт BitBucket от AppCenter. Заходим в неправильный BitBucket аккаунт, идем в профиль пользователя.
Далее переходим в Settings > Access Management > OAuth
Нажимаем Revoke, чтобы отвязать аккаунт.
После этого нужно залогиниться под нужным BitBucket аккаунтом
* В крайнем случае еще и почистить кэш браузера
Теперь переходим в AppCenter. переходим в секцию Build, нажимаем Disconnect BitBucket account
Когда старый аккаунт будет отвязан, привязываем AppCenter заново. Теперь уже к нужному аккаунту.
Используем вместо команды
- eval $(ssh-agent -s)
Команду:
- ssh-agent
В некоторых случаях придётся или указать полный путь к C:\Program Files\Git\usr\bin\ssh-agent.exe, или добавить этот путь в системные переменные на машине, где запущен runner
В моём случае проблема возникла из-за того, что я работала с несколькими аккаунтами. Решилась очисткой кэша.
h0use
А кто такой BitBacket? или Вы имеет ввиду bitbucket.org/product?
AnjaHolosova Автор
Спасибо, поправила :)