Integrarea AppCenter și GitLab

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 articol. 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.git

Rulă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 aici.
Cheile generate arată cam așa:
Integrarea AppCenter și GitLab

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
Integrarea AppCenter și GitLab

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

Integrarea AppCenter și GitLab

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/*****/*.git

3. Configurarea AppCenter

Creăm o nouă aplicație în AppCenter.

Integrarea AppCenter și GitLab

Specificați limbajul/platforma

Integrarea AppCenter și GitLab

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.

Integrarea AppCenter și GitLab

Î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.

Integrarea AppCenter și GitLab

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

Integrarea AppCenter și GitLab

Apăsați Revoke pentru a deconecta contul.

Integrarea AppCenter și GitLab

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.

Integrarea AppCenter și GitLab

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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster