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ć.
Połącz forge
Dział zatytułowany „Połącz forge”- Otwórz Ustawienia → Obszar roboczy → Profil i tożsamość (
/settings/workspace/profile). - Znajdź kartę Hosting kodu. Wymienione są wszystkie obsługiwane forge — połączone i niepołączone.
- 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 |
Jakiego tokenu wymaga każde forge
Dział zatytułowany „Jakiego tokenu wymaga każde 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.
Albo użyj środowiska
Dział zatytułowany „Albo użyj środowiska”W instalacji headless lub w CI serwer odczytuje następujące zmienne:
- GitHub —
GITHUB_TOKEN, potemGH_TOKEN - GitLab —
GITLAB_TOKEN, potemCI_JOB_TOKEN - Bitbucket —
BITBUCKET_API_TOKEN, potemBITBUCKET_TOKEN(razem zBITBUCKET_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.
Na każdym forge jesteś inną osobą
Dział zatytułowany „Na każdym forge jesteś inną osobą”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.
Jedna skrzynka, każde forge
Dział zatytułowany „Jedna skrzynka, każde forge”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.
Co potrafi każde forge
Dział zatytułowany „Co potrafi każde forge”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.
Słownictwo
Dział zatytułowany „Słownictwo”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.
Rozwiązywanie problemów
Dział zatytułowany „Rozwiązywanie problemów”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.
Repozytorium nie chce się zarejestrować
Dział zatytułowany „Repozytorium nie chce się zarejestrować”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.