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. . 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.gitW 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.gitUruchamiamy 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ć .
Wygenerowane klucze wyglądają mniej więcej tak:

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.

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

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/*****/*.git3. Konfiguracja AppCenter
Tworzymy nową aplikację w AppCenter.

Wskazujemy język/platformę

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.

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.

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

Klikamy Revoke, aby odłączyć konto.

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.

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-agentW 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
