Integracja AppCenter i GitLab

Cześć, witam!

Chciałbym opowiedzieć o swoim doświadczeniu w konfiguracji integracji GitLab i AppCenter przez BitBucket.

Potrzeba takiej integracji powstała podczas ustawiania automatycznego uruchamiania testów UI dla wieloplatformowego projektu na Xamarin. Szczegółowy tutorial znajdziesz poniżej!

* O automatyzacji testów UI w warunkach wieloplatformowości napiszę osobny artykuł, jeśli publikacja wzbudzi zainteresowanie.

Odnalezienie podobnego materiału zajęło mi trochę czasu. artykuł. Dlatego mój artykuł może komuś pomóc.

Zadanie: Ustawić automatyczne uruchamianie testów UI na AppCenter, przy założeniu, że nasz zespół używa GitLab jako systemu kontroli wersji.

Problem okazało się, że AppCenter nie integruje się bezpośrednio z GitLab. Jako jedno z rozwiązań wybrano obejście przez BitBucket.

Kroki

1. Tworzymy puste repozytorium na BitBucket.

Nie widzę potrzeby, aby opisywać to bardziej szczegółowo 🙂

2. Konfigurujemy GitLab.

Musimy sprawić, aby przy push/merge do repozytorium zmiany były również przesyłane na BitBucket. W tym celu dodajemy runnera (lub edytujemy istniejący plik .gitlab-ci.yml).

Najpierw dodajemy polecenia do sekcji before_scripts

 - git config --global user.email "user@email"
 - git config --global user.name "username"

Następnie dodajemy następujące polecenie do odpowiedniego etapu:

- git push --mirror https://username:password@bitbucket.org/username/projectname.git

W moim przypadku plik wyglądał tak:

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

Uruchamiamy build, sprawdzamy, czy nasze zmiany/pliki trafiły na BitBucket.
* Jak pokazuje praktyka, konfiguracja kluczy SSH nie jest obowiązkowa. Ale dla pewności przedstawiam algorytm konfiguracji połączenia przez SSH poniżej.

Podłączenie przez SSH

Najpierw musisz wygenerować klucz SSH. O tym napisano wiele artykułów. Dla przykładu możesz zobaczyć tutaj.
Wygenerowane klucze wyglądają mniej więcej tak:
Integracja AppCenter i GitLab

Dalej klucz prywatny należy dodać jako zmienną na GitLab. W tym celu przechodzimy do Ustawienia > CI/CD > Zmienne środowiskowe. Dodajemy CAŁĄ zawartość pliku, w którym zapisałeś klucz prywatny. Nazwijmy zmienną SSH_PRIVATE_KEY.
* ten plik, w przeciwieństwie do pliku z kluczem publicznym, nie będzie miał rozszerzenia.
Integracja AppCenter i GitLab

Świetnie, teraz musisz dodać klucz publiczny na BitBucket. W tym celu otwieramy repozytorium, przechodzimy do Ustawienia > Klucze dostępu.

Integracja AppCenter i GitLab

Klikamy Dodaj klucz i wklejamy zawartość pliku z kluczem publicznym (plik z rozszerzeniem .pub).

Następnym krokiem będzie wykorzystanie kluczy w gitlab-runner. Użyj tych poleceń, ale podaj zamiast gwiazdek swoje dane.

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. Konfiguracja AppCenter

Tworzymy nową aplikację w AppCenter.

Integracja AppCenter i GitLab

Wskazujemy język/platformę

Integracja AppCenter i GitLab

Następnie przechodzimy do sekcji Build nowo utworzonej aplikacji. Wybieramy tam BitBucket i repozytorium utworzone w kroku 1.

Świetnie, teraz trzeba skonfigurować build. W tym celu szukamy ikony zębatki.

Integracja AppCenter i GitLab

Zasadniczo, wszystko tam jest intuicyjnie zrozumiałe. Wybieramy projekt i konfigurację. W razie potrzeby włączamy uruchamianie testów po zbudowaniu. Będą one uruchamiane automatycznie.

W zasadzie to wszystko. Brzmi prosto, ale oczywiście nie wszystko pójdzie gładko. Dlatego opiszę kilka błędów, z którymi się spotkałem podczas pracy:

‘ssh-keygen’ nie jest rozpoznawane jako polecenie wewnętrzne lub zewnętrzne.

Występuje z powodu tego, że ścieżka do ssh-keygen.exe nie została dodana do zmiennych środowiskowych.
Są dwa rozwiązania: dodaj C:Program FilesGitusrbin do Zmiennych środowiskowych (zastosuje się po ponownym uruchomieniu maszyny), lub uruchom konsolę z tego katalogu.

AppCenter podłączył się do niewłaściwego konta BitBucket?

Aby rozwiązać problem, należy odłączyć konto BitBucket od AppCenter. Wchodzimy na niewłaściwe konto BitBucket, przechodzimy do profilu użytkownika.

Integracja AppCenter i GitLab

Następnie przechodzimy do Ustawienia > Zarządzanie dostępem > OAuth.

Integracja AppCenter i GitLab

Klikamy Revoke, aby odłączyć konto.

Integracja AppCenter i GitLab

Po tym należy się zalogować na właściwe konto BitBucket.
* W ostateczności można również wyczyścić pamięć podręczną przeglądarki.

Teraz przechodzimy do AppCenter. Przechodzimy do sekcji Build, klikamy Odłącz konto BitBucket.

Integracja AppCenter i GitLab

Kiedy stare konto zostanie odłączone, ponownie łączymy AppCenter, tym razem z właściwym kontem.

‘eval’ nie jest rozpoznawane jako polecenie wewnętrzne lub zewnętrzne.

Używamy zamiast polecenia

  - eval $(ssh-agent -s)

Polecenia:

  - ssh-agent

W niektórych przypadkach będziesz musiał lub podać pełną ścieżkę do C:Program FilesGitusrbinssh-agent.exe, lub dodać tę ścieżkę do zmiennych systemowych na maszynie, na której działa runner.

AppCenter Build próbuje uruchomić build dla projektu z nieaktualnego repozytorium bitBucket.

W moim przypadku problem pojawił się, ponieważ pracowałam z kilkoma kontami. Został rozwiązany poprzez wyczyszczenie cache'u.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster