Bună, salut!
Vreau să împărtășesc experiența mea în configurarea integrării GitLab și AppCenter prin BitBucket.
Necesitatea acestei integrări a apărut în timpul configurării lansării automate a testelor UI pentru un proiect multiplatformă pe Xamarin. Tutorialul detaliat este mai jos!
* Despre automatizarea testării UI în condiții de multiplatformă, voi scrie un articol separat dacă publicul va fi interesat.
Am găsit doar un singur material similar . Prin urmare, articolul meu poate fi de ajutor cuiva.
Sarcină: Configurarea lansării automate a testelor UI pe AppCenter, având în vedere că echipa noastră folosește GitLab ca sistem de control al versiunilor.
Problema s-a dovedit a fi că AppCenter nu se integrează direct cu GitLab. Ca una dintre soluții, a fost ales un ocol prin BitBucket.
Pașii
1. Creăm un repository gol pe BitBucket
Nu văd necesitatea de a detalia mai mult 🙂
2. Configurăm GitLab
Avem nevoie ca, la push/merge în repository, modificările să fie încărcate și pe BitBucket. Pentru asta, adăugăm un runner (sau edităm fișierul existent .gitlab-ci.yml).
Mai întâi, adăugăm comenzile în secțiunea before_scripts
- git config --global user.email "user@email"
- git config --global user.name "username"Apoi, adăugăm următoarea comandă în etapa dorită:
- git push --mirror https://username:password@bitbucket.org/username/projectname.gitÎn cazul meu, a rezultat un fișier de acest tip
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.gitRulăm build-ul, verificăm că modificările/fișierele noastre au fost încărcate pe BitBucket.
* după cum a arătat practica, configurarea cheilor SSH nu este obligatorie. Dar, pentru orice eventualitate, voi prezenta mai jos algoritmul de configurare a conexiunii prin SSH
Conexiune prin SSH
Mai întâi trebuie să generăm o cheie SSH. Despre acest lucru s-au scris multe articole. Pentru exemplu, puteți consulta .
Cheile generate arată cam așa:

Următorul cheia secretă trebuie adăugată ca variabilă în GitLab. Pentru asta, mergem la Settings > CI/CD > Environment Variables. Adăugăm TOT conținutul fișierului în care ați salvat cheia secretă. Vom numi variabila SSH_PRIVATE_KEY.
* acest fișier, spre deosebire de fișierul cu cheia publică, nu va avea extensie

Excelent, apoi trebuie să adăugăm cheia publică pe BitBucket. Pentru aceasta, deschidem repository-ul, mergem la Settings > Access Keys.

Aici apăsăm Add Key și inserăm conținutul fișierului cu cheia publică (fișier cu extensia .pub).
Următorul pas va fi utilizarea cheilor în gitlab-runner. Folosiți aceste comenzi, dar specificați datele dumneavoastră în loc de asteriscuri.
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. Configurarea AppCenter
Creăm o nouă aplicație în AppCenter.

Specificați limbajul/platforma

Apoi, accesați secțiunea Build a aplicației tocmai create. Acolo selectați BitBucket și repository-ul creat la pasul 1.
Excelent, acum trebuie să configurăm build-ul. Pentru aceasta, găsiți pictograma rotiței.

În principiu, totul este intuitiv. Alegeți proiectul și configurația. Dacă este necesar, activați rularea testelor după build. Acestea se vor rula automat.
În principiu, asta e tot. Pare simplu, dar, desigur, nu va merge totul lin. Prin urmare, voi descrie câteva erori cu care m-am confruntat în timpul lucrului:
‘ssh-keygen’ nu este recunoscut ca o comandă internă sau externă.
Apare din cauza că calea către ssh-keygen.exe nu a fost adăugată în variabilele de mediu.
Sunt două opțiuni: adăugați C:Program FilesGitusrbin în Variabilele de Mediu (se va aplica după repornirea mașinii) sau deschideți consola din acest director.
AppCenter s-a conectat la contul greșit de BitBucket?
Pentru a rezolva problema, trebuie să deconectați contul BitBucket de la AppCenter. Accesați contul greșit de BitBucket, mergeți la profilul utilizatorului.

Apoi, mergeți la Settings > Access Management > OAuth

Apăsați Revoke pentru a deconecta contul.

După aceasta, trebuie să vă autentificați cu contul dorit de BitBucket.
* În ultimă instanță, curățați și memoria cache a browser-ului.
Acum trecem la AppCenter, accesăm secțiunea Build, apăsăm Disconnect BitBucket account.

Când vechiul cont va fi deconectat, reconectăm AppCenter din nou. Acum la contul dorit.
‘eval’ nu este recunoscut ca o comandă internă sau externă.
Folosim în locul comenzii
- eval $(ssh-agent -s)Comanda:
- ssh-agentÎn unele cazuri va trebui fie să specificați calea completă către C:Program FilesGitusrbinssh-agent.exe, fie să adăugați această cale în variabilele de sistem de pe mașina unde este rulat runner-ul.
AppCenter Build încearcă să pornească build-ul pentru proiect dintr-un repository BitBucket inactual.
În cazul meu, problema a apărut deoarece lucram cu mai multe conturi. Am rezolvat-o prin ștergerea cache-ului.
Sursa: habr.com
