Przejdź do głównej zawartości

Połącz host kodu

Control Center współpracuje z trzema hostami kodu, które w całej aplikacji nazywane są forge: GitHub, GitLab i Bitbucket Cloud. Żaden z nich nie jest domyślny. Połącz jeden i wszystko działa; połącz kilka, a jeden obszar roboczy może naraz przechowywać repozytoria ze wszystkich.

Forge jest właściwością każdego repozytorium, odczytywaną ze zdalnego repozytorium origin w chwili jego rejestracji. Nigdy nie wybierasz forge ręcznie i nie ma żadnego ustawienia na poziomie obszaru roboczego, które dałoby się pomylić.

  1. Otwórz Ustawienia → Obszar roboczy → Profil i tożsamość (/settings/workspace/profile).
  2. Znajdź kartę Hosting kodu. Wymienione są wszystkie obsługiwane forge — połączone i niepołączone.
  3. Kliknij Zaloguj się przez …, jeśli wiersz to oferuje, albo Dodaj token i wklej token.

Zaloguj się pojawia się dla forge, dla którego Twój serwer ma zarejestrowaną aplikację — dziś jest to GitHub, przez przepływ urządzenia (zobacz Utwórz GitHub App). Wszystko inne to wklejony token, czyli uczciwa propozycja zamiast przycisku, który nie może się powieść.

Tak czy inaczej poświadczenie jest Twoje i znajduje się na serwerze, przypisane do Twojego identyfikatora użytkownika: żaden token nie jest zapisywany na maszynie, na której go wpisano, każde urządzenie, z którego się logujesz, korzysta z tego samego, a żaden inny członek nie może go odczytać. Działa od następnego żądania — nie ma nic do zrestartowania, a rozłączenie natychmiast wstrzymuje jego wysyłanie.

Każdy wiersz mówi, skąd pochodzi jego poświadczenie, bo to różnica między „mój token nie działa” a „odpowiada inny token”:

Podtytuł Znaczenie
Zalogowano jako octocat Używane są Twoje własne poświadczenia
Zalogowano jako octocat · przez aplikację tego serwera Odpowiada tożsamość aplikacji serwera — nie jesteś zalogowany
Zalogowano jako octocat · ze środowiska Odpowiada zmienna środowiskowa serwera, a nie Twoje poświadczenie
Nie połączono Nie masz poświadczenia dla tego forge
Forge Token Gdzie go utworzyć
GitHub Klasyczny: repo i read:org. Drobnoziarnisty: Contents + Pull requests (odczyt/zapis), Checks + Actions (odczyt) github.com → Settings → Developer settings → Tokens
GitLab Osobisty token dostępu z zakresem api gitlab.com → User settings → Access tokens
Bitbucket Token API Atlassian oraz adres e-mail Twojego konta id.atlassian.com → Security → API tokens

Bitbucket uwierzytelnia się adresem e-mail konta jako nazwą użytkownika i tokenem jako hasłem. Ustaw BITBUCKET_EMAIL w środowisku serwera, aby wiedział, z którym adresem e-mail ma połączyć token.

W instalacji headless lub w CI serwer odczytuje następujące zmienne:

  • GitHub — GITHUB_TOKEN, potem GH_TOKEN
  • GitLab — GITLAB_TOKEN, potem CI_JOB_TOKEN
  • Bitbucket — BITBUCKET_API_TOKEN, potem BITBUCKET_TOKEN (razem z BITBUCKET_EMAIL)

To poświadczenia serwera, nie Twoje, a rozróżnienie ma kluczowe znaczenie: żądanie wysłane w Twoim imieniu używa wyłącznie Twoich poświadczeń, więc środowisko nigdy po cichu Cię nie zastępuje. Praca bez człowieka w tle — webhooki, odpytywanie PR-ów, synchronizacja zgłoszeń — sięga najpierw po tożsamość aplikacji serwera, potem po poświadczenia właściciela serwera, a na końcu po środowisko. Kolejność jest stała, więc „zalogowałem się i nic się nie zmieniło” nigdy nie jest obsługiwanym wynikiem.

Ta sama osoba to octocat na GitHubie i zupełnie ktoś inny na GitLabie. Control Center rozwiązuje Twoją tożsamość dla każdego forge osobno i używa właściwej dla danego repozytorium, dzięki czemu „wymaga mojej recenzji”, „utworzone przeze mnie” i „zatwierdzone przez Ciebie” są poprawne w mieszanym obszarze roboczym.

Jeśli tożsamość w danym forge nie została rozwiązana, jego repozytoria nie wnoszą nic do skrzynki, zamiast dopasowywać wszystko. Skrzynka mówi o tym wprost, zamiast twierdzić, że jesteś na bieżąco.

Skrzynka i kolejka PR-ów rozchodzą się po wszystkich forge obecnych w obszarze roboczym i scalają wyniki w jeden strumień — pull request z GitHuba i pull request z Bitbucket leżą obok siebie, uporządkowane według czasu, a nie pogrupowane według dostawcy.

Awarie są izolowane. Forge, który nie działa, ma wyczerpany limit żądań albo nie jest połączony, nie wnosi nic i nie rusza pozostałych; nigdy nie opróżnia całej skrzynki. Jego repozytoria nadal pokazują ostatni znany stan, dopóki nie wróci do działania.

Każde forge obsługuje podstawowy cykl: wyświetlanie i otwieranie pull requestów, czytanie diffów, komentowanie w linii i na poziomie całego PR-a, recenzowanie, scalanie i zamykanie. Poza tym naprawdę się różnią, a Control Center ukrywa to, czego dane forge nie potrafi, zamiast pokazywać kontrolkę, która po cichu zawodzi.

Możliwość GitHub GitLab Bitbucket
Recenzje wsadowe (oczekujące) ✓ ✓ —
Żądanie zmian ✓ ✓ ✓
Synchronizowany stan „obejrzane” dla pliku ✓ — —
Reakcje emoji ✓ ✓ —
Recenzenci z zespołu / grupy ✓ ✓ —
Sugerowani recenzenci ✓ — ✓
Wyniki CI w pull requeście ✓ ✓ ✓
Zagłębianie się w kroki i logi zadania CI ✓ ✓ —
Pull requesty układane w stos ✓ — —
Szablony opisów pull requestów ✓ ✓ —
Odpytywanie powiadomień ✓ — —
Rozbudowane profile użytkowników ✓ ✓ —
Referencja head PR-a po stronie serwera ✓ ✓ —

Tam, gdzie jakiejś możliwości brakuje, funkcja degraduje się uczciwie:

  • Stan „obejrzane” nadal działa, ale tylko na urządzeniu, na którym go ustawisz.
  • Recenzje wsadowe w Bitbucket publikują komentarz po komentarzu, więc recenzenci widzą, jak pojawiają się pojedynczo, a nie wszystkie naraz.
  • Brak referencji head PR-a w Bitbucket oznacza, że pobranie pull requesta sprowadza się do pobrania jego gałęzi źródłowej po nazwie, co przestaje działać, gdy ta gałąź zostanie usunięta.

GitLab nazywa pull request merge request. Control Center w całym swoim modelu mówi „pull request”, a gdy mówi o konkretnym forge, używa jego własnego określenia.

Lista PR-ów jest pusta i informuje, że forge nie jest połączony

Dział zatytułowany „Lista PR-ów jest pusta i informuje, że forge nie jest połączony”

Nie masz poświadczenia dla tego forge. Zaloguj się albo wklej token w Ustawienia → Obszar roboczy → Profil i tożsamość → Hosting kodu. Repozytoria innych forge pozostają bez zmian.

Połączyłem forge, ale jego repozytoria nadal nic nie pokazują

Dział zatytułowany „Połączyłem forge, ale jego repozytoria nadal nic nie pokazują”

Sprawdź podtytuł wiersza. Jeśli widnieje w nim „przez aplikację tego serwera” lub „ze środowiska”, odpowiada inne poświadczenie niż oczekiwane — Twoje własne poświadczenie ma pierwszeństwo przy wszystkim, o co prosisz, więc jeśli podtytuł mówi co innego, Twoje nie zostało zapisane.

Rejestracja wymaga wszystkich trzech warunków: ścieżka znajduje się w drzewie roboczym Gita, repozytorium ma zdalne origin, a to zdalne repozytorium wskazuje na github.com, gitlab.com lub bitbucket.org. Zobacz Dodaj repozytoria do obszaru roboczego.

Po intensywnym użytkowaniu wszystko na jakiś czas przestaje działać

Dział zatytułowany „Po intensywnym użytkowaniu wszystko na jakiś czas przestaje działać”

To wyłącznik bezpieczeństwa przy limicie żądań. Forge, który zgłasza swój główny limit, sprawia, że klient odrzuca kolejne żądania lokalnie, bez wywołania sieciowego, aż upłynie okno — dzięki temu burza ponowień nie pogłębia limitu. Przejściowe błędy są ponawiane z wykładniczym opóźnieniem.