Skip to content

Jak uruchomić serwer Drone dla GitHuba przy użyciu Docker Compose?

Cześć. Dzisiaj zaprezentuję Wam jak szybko uruchomić serwer Drone dla GitHub oraz dodać w nim swój pierwszy proces CI/CD.

Ten artykuł wchodzi w skład cyklu pokazującego jak rozpocząć pracę w popularnych narzędziach CI/CD. W ramach artykułu pokażę Wam jak zainstalować narzędzie CI/CD oraz jak przygotować proces budowania oraz testowania prostego projekty opartego na Mavenie.

Czym jest Drone?

Drone jest systemem do ciągłego dostarczania oprogramowania opartym na technologii kontenerów. Drone używa prostych plików YAML aby zdefiniować procesy ciągłego budowania, testowania i automatycznej instalacji projektów. Co istotne wszystkie zadania wykonywane są w środku kontenerów.

Czym jest Docker Compose?

Aby dowiedzieć się czym jest Docker Compose przejdź do artykułu: Jak zainstalować Jenkinsa przy użyciu Docker Compose?

Wymagane narzędzia

W przypadku tego poradnika skorzystamy ze środowiska (piaskownicy) udostępnianego przez serwis KataKoda: https://www.katacoda.com/courses/docker/playground. Jest to serwis, który umożliwia uruchomienie kontenerów dockerowych w wirtualnym środowisku w przeglądarce. W związku z tym nie jest konieczne instalowanie narzędzi na naszym lokalnym środowisku.

Warto tutaj pamiętać o tym, że sesja w tym środowisku trwa godzinę. Po tym czasie nasza praca zostanie usunięta. Pomimo tego, warto skorzystać z tego serwisu aby sprawdzić, czy Drone jest narzędziem wartym zainteresowania.

Jedynym wymaganiem dla tego poradnika jest posiadania konta w serwisie GitHub oraz wykonanie forka (kopii) repozytorium dostępnego pod adresem: https://github.com/czerniga/helloworld. Repozytorium te zawiera przykładowy projekt Java, który posłuży nam jako źródło dla procesu CI/CD.

Uruchamiamy środowisko

W pierwszym kroku przechodzimy do strony https://www.katacoda.com/courses/docker/playground i klikamy na START SCENARIO.

Ekran uruchamiania scenariusza w KataKoda
Ekran uruchamiania scenariusza w KataKoda

Po uruchomieniu środowiska zobaczymy po lewej stronie scenariusz umożliwiający szybkie zapoznanie się z Dockerem. To jednak w tym momencie nie będzie dla nas przydatne. Ważniejszy jest dla nas panel po prawej gdzie mamy pełnoprawny terminal, w którym mamy dostępne narzędzie docker oraz docker compose. Co ważne, uruchomione w tym środowisku kontenery dostępne są z Internetu. Będzie to przydatne w momencie gdy będziemy uruchamiać mechanizm autoryzacji.

Przed rozpoczęciem pracy musimy poznać adres naszego środowiska. W tym celu klikamy na link dostępny w lewym panelu (View port at … ). W nowym ekranie wpisujemy port 80 i klikamy Display Port.

Wybór portu w KataKoda
Wybór portu w KataKoda

Po przejściu na nową stronę kopiujemy adres URL naszego serwera. Będzie on potrzebny w następnych krokach.

Konfiguracja aplikacji w GitHub

Serwis Drone nie zawiera wbudowanego mechanizmu autoryzacji i polega w pełni na mechanizmie Oauth dostarczanym przez zewnętrzne serwisy, w których przechowujemy nasz kod aplikacji. Obecnie Drone obsługuje klika takich serwisów (m.in. GitLab, GitHub, Bitbukcet). W naszym poradniku skupimy się na serwisie GitHub.

Aby umożliwić autoryzację za pomocą OAuth w serwisie Github należy utworzyć aplikację OAuth. W tym celu logujemy się na nasze konto w GitHub i tworzymy aplikację, co dokładnie zostało opisane w tym poradniku: https://docs.github.com/en/developers/apps/building-oauth-apps/creating-an-oauth-app

Podczas tworzenia powyższej aplikacji w polu Homepage URL podajcie adres URL skopiowany w poprzednim kroku. Natomiast w polu Authorization callback URL podajcie adres URL z dodanym na końcu endpointem „/authorize”. W moim przypadku wyglądało to tak:

Ustawienie aplikacji Oauth w GitHub
Ustawienie aplikacji Oauth w GitHub

Po utworzeniu aplikacji musimy jeszcze utworzyć hasło dla naszego klienta. W tym celu klikamy na Generate a new client secret. Po chwili utworzy się nam nowe hasło. W tym kroku kopiujemy Client ID (u góry) oraz Client secret (na dole).

Hasło klienta w GitHub
Hasło klienta w GitHub

Uruchamiamy serwis w dockerze

Wracamy teraz do Katakody i tworzymy plik docker-compose.yml z poniższą zawartością:

version: '2'

services:
  drone-server:
    image: drone/drone:0.8

    ports:
      - 80:8000
      - 9000
    volumes:
      - drone-server-data:/var/lib/drone/
    restart: always
    environment:
      - DRONE_OPEN=true
      - DRONE_HOST=${DRONE_HOST}
      - DRONE_GITHUB=true
      - DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
      - DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
      - DRONE_SECRET=${DRONE_SECRET}

  drone-agent:
    image: drone/agent:0.8

    command: agent
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_SERVER=drone-server:9000
      - DRONE_SECRET=${DRONE_SECRET}

volumes:
  drone-server-data:

Konfiguracja ta definiuje nasze kontenery dla serwera Drone. W tym przypadku będzie to serwis Drone oraz jeden Drone Agent (osobny moduł do uruchamiania zadań CI/CD). Najważniejsze parametry konfiguracji to:

  • image – obraz docker, który chcemy wykorzystać w naszym serwisie
  • ports – lista portów, które udostępniamy na zewnątrz serwisu. W naszej konfiguracji udostępniamy porty 80 i 9000
  • volumes – określa wolumeny, które są wykorzystane przez kontener. W naszej konfiguracji mamy wolumen umożliwiający dostęp do środowiska Docker z poziomu serwera Drone.

Do prawidłowego uruchomienia tej konfiguracji musimy jeszcze zdefiniować 4 zmienne środowiskowe:

  • DRONE_HOST – adres serwera Drone. To adres url serwisu KataKoda, który skopiowaliśmy w poprzednim kroku
  • DRONE_SECRET – to hasło, które będzie wykorzystywane do komunikacji pomiędzy Drone i agentami. Można je wygenerować np. za pomocą komendy „openssl rand -hex 16”
  • DRONE_GITHUB_CLIENT – To id klienta (CLIENT ID) naszej aplikacji w GitHub
  • DRONE_GITHUB_SECRET – To hasło (Client secret) naszej aplikacji w GitHub.

Poniżej przedstawiam instrukcje, które ustawiają nasze zmienne środowiskowe z przykładowymi wartościami:

export DRONE_HOST=https://2886795289-80-elsy06.environments.katacoda.com/
export DRONE_SECRET=216efb6e9dac2ae80ca69051d7c28d61
export DRONE_GITHUB_CLIENT=518e68a12cd76071d39b
export DRONE_GITHUB_SECRET=25e1a8e6211f3141645d52b59cd0512862dd7eba

Po ustawieniu powyższych zmiennych możemy uruchomić nasz serwis. Robimy to za pomocą komendy:

> docker-compose up -d

Po przejściu do adresu naszej strony pojawi się komunikat dotyczący autoryzacji serwera Drone w naszym koncie Github. Tutaj autoryzujemy ten dostęp.

Autoryzacja w Drone
Autoryzacja w Drone

Po autoryzacji powinniśmy zobaczyć ekran dotyczący pobrania informacji o repozytoriach znajdujących się na naszym koncie GitHub. Po chwili powinniśmy przejść do głównego ekranu serwera.

Na powyższym ekranie wybieramy nasz zaimportowany projekt „czerniga/helloworld” i aktywujemy go na serwerze (ustawiamy przełącznik po prawej stronie). Po odświeżeniu zobaczymy po lewej stronie informację o tym projekcie. Póki co nic jeszcze nie zostało uruchomione dla tego projektu dlatego też nie mamy tutaj żadnych szczególnych informacji.

Tworzymy pipeline CI/CD

Aby utworzyć zadanie w naszym projekcie musimy dodać odpowiedni plik z instrukcjami. Tutaj bardzo podobnie jak w przypadku GitLaba tworzymy pliki YAML o nazwie .drone.yml w katalogu głównym naszego repozytorium. Możemy to zrobić poprzez UI GitHuba albo przy pomocy ulubionych narzędzi do obsługi Git.

W utworzonym pliku dodajemy poniższą zawartość:

pipeline:
  build:
    image: maven:3-jdk-10
    commands:
      - echo "Compiling the code..."
      - mvn clean package
  test:
    image: maven:3-jdk-10
    commands:
      - echo "Running tests"
      - java -cp target/helloworld-1.1.jar com.coveros.demo.helloworld.HelloWorld

Powyższy plik definiuje nam nam jak ma działać proces CI/CD. Najważniejsze elementy to:

  • pipeline: główny element naszej definicji, który mówi o tym, że jest to pipeline
  • build: pierwszy krok naszego definicji, którego celem jest zbudowanie naszego projektu.
  • test: drugi krok, którego celem będzie testowe uruchomienie naszego projektu

Po zapisaniu pliku w repozytorium możemy przejść do naszego serwera. Po chwili nastąpi automatycznie uruchomieniu całego procesu, który będzie się składał z trzech kroków:

  • klonowanie repozytorium
  • budowanie projektu
  • testy

Po chwili projekt powinien się zbudować. Po przejściu do szczegółów możemy sprawdzić logi każdego z zadań.

Pierwsze zadanie drone dla githuba zakończone sukcesem
Pierwsze zadanie drone dla githuba zakończone sukcesem

Gratulację, właśnie utworzyłeś swoje pierwszy proces CI/CD w Drone!

Zatrzymujemy kontener

Kontenery zawierające nasz serwis zostały uruchomione z przełącznikiem powodującym pracę w tlę. Jeśli chcecie zatrzymać portal należy wykonać polecenie:

docker-compose down

Podsumowanie

W tym poradniku pokazałem jak można szybko uruchomić serwer Drone wraz z jednym agentem. Co ważne, ten serwer jest bardzo lekki. Po uruchomieniu kontenery dla serwera wraz agentem zajmują tylko ok 20 MB pamięci! Dlatego też warto się zainteresować tym rozwiązaniem nawet pomimo tego, że nie zawiera ono tak dużo możliwości konfiguracji jak konkurencja (np. GitLab).

Published inCI/CDDockerPoradnik

Be First to Comment

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *