Інтэграцыя 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' не з'яўляецца reconcognized як internal or 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' не з'яўляецца reconcognized як internal or external command

Выкарыстоўваны замест каманды

  - eval $(ssh-agent -s)

Каманду:

  - ssh-agent

У некаторых выпадках давядзецца або паказаць поўны шлях да C:Program FilesGitusrbinssh-agent.exe, або дадаць гэты шлях у сістэмныя зменныя на машыне, дзе запушчаны runner

AppCenter Build спрабуе запусціць білд для праекта з неактуальнага bitBucket рэпазітара

У маім выпадку праблема ўзнікла з-за таго, што я працавала з некалькімі акаўнтамі. Вырашылася ачысткай кэша.

Крыніца: habr.com

Дадаць каментар