top of page

Śledź nasze wpisy w social media

  • Instagram
  • Facebook
  • Twitter
  • LinkedIn
  • YouTube
Zdjęcie autoraPiotr Kośka

Jenkins w cloud z wykorzystaniem digitalocean i AWS

W tym artykule porozmawiamy o repozytorium kodu, które pozwoli wam uruchomić i przetestować Jenkinsa w konfiguracji cloud. Całe środowisko bazuje na kodzie terraform wzbogaconego o konfigurację w cloud init. Pozwala to zautomatyzować konfigurację. Dodatkowe elementy sterujące są w plikach konfiguracyjnych json zawarte w tym repozytorium. Możesz też cała konfiguracje obejrzeć na moim kanale na youtube.



Cała konfiguracja bazuje na kodzie terraform przygotowanym przezemnie tu https://bitbucket.org/szkoleniacloud/jenkins-lab-env-digitalocean/src/main/


Przechodząc do repozytorium musimy udać się do katalogu CloudConfigurations/DigitalOcean gdzie znajduje się nasz kod terraform. Pozwoli on uruchomić naszą konfigurację i dostarczyć dynamicznie środowisko do zabawy z jenkins.


Środowisko takie możemy wykorzystać do nauki budowania i konfigurowania procesów CI/CD z wykorzystaniem Jenkins. Wiedzę w ten sposób zdobytą możemy przenieść na inne narzędzia CI/CD takie jak na przykład github actions, bitbucket pipeline, azure devops. Oczywiście nie jeden do jednego bo Jenkins charakteryzuje się swoją składnią dostępną w jenkinsfile. Jednak wszystko po kolei.



Kod do uruchomienia Jenkins w Cloud


Prezentowany kod uruchamia w chmurze digitalocean i aws konfiguracje którą, pozwala uruchomić Jenkins w konfiguracji master i slave w cloud. Na początku zanim uruchomimy nasz kod będziemy potrzebować konta w digitalocean i aws. Usługi płatne z których, będziemy korzystać to digitalocean droplet i aws route53.


Cały kod uruchamiamy wydając polecenie terraform init, terraform plan, terraform apply oraz po skończonych testach terraform destroy - operacje te wydajemy w katalogu CloudConfigurations/DigitalOcean



Klucze api do kont cloud w celu uruchomienia Jenkins


Do korzystania z kodu będa nam potrzebne klucze api do wskazanych wyżej chmur aws i digitalocean. Klucze podamy w pliku .auto.tfvars (plik ten jest dodany w gitignore więc nie przejmuj się o przypadkowe umieszczenie ich w repozytorium). Plik wygląda w nastepującej postaci:


Nasz aws_access_key i aws_secret_key wygenerujemy w konfiguracji naszego usera w serwisie IAM na koncie AWS.



aws iam service

aws iam service

aws iam service

aws iam service

Wartość dla naszej zmiennej w do_token wygenerujemy logując się do naszego konta digitalocean


generowanie api klucza w digitalocean

generowanie klucza api w digitalocean

Po wygenerowaniu kluczy API do AWS i Digitalocean dodajemy je w naszym pliku .auto.tfvars oraz uzupełniamy nasz adres email do powiadomień z let's encrypt.




Główna konfiguracja Jenkins w kodzie terraform.

W konfiguracji wykorzystujemy dwa moduły które ułatwiają nam konfigurację.


Jeden jest odpowiedzialny za sieć drugi za uruchomienie w tej sieci maszyny wirtualnej (dokładnie dwóch maszyn). Przeanalizujmy zatem konfiguracje tych dwóch modułów.

Dzięki niemu mogę kontrolować stawiane sieci w ramach mojej konfiguracji środowiska Jenkins w cloud digitalocean. W bloku module odwołujemy się do:


  • argumentu vpc_config gdzie możemy ustawić

    • nazwę sieci,

    • opis,

    • nazwa konta,

    • oraz drugi oktet naszej sieci.


W części odpowiedzialnej za maszyny wirtualne mamy argumenty sterujące takie jak:


  • jsonconfig - odpowiedzialny za konfigurację maszyny wirtualnej która, jest opisana w pliku json w katalogu files/jsonconfigs

  • domain_name - nazwa naszej subdomeny / domeny w ramach której będę uruchamiać naszą konfigurację route53.

  • vpc_uuid - tu odwołuję się do id sieci na której będę uruchamiał konfigurację (kluczem są dostępne regiony w digitalocean.

  • user_data_file - to alternatywna konfiguracja naszego pliku cloud-init yaml gdy nie wskarzemy go w naszym pliku konfiguracyjnym json.


Nasza konfiguracja w pliku json przedstawia się następująco - spójrzmy na plik: CloudConfigurations/DigitalOcean/_files/json_configs/jenkins.json


W tym pliku wskazujemy parametry konfiguracyjne naszej maszyny wirtualnej takie jak:


  • nazwa na która składają się pola user_name oraz name,

  • obraz systemu pole image,

  • region w którym zostanie uruchomiona maszyna wirtualna pole region (tu musimy nazwę regionu stawić taką samą jak klucz w identyfikatorze sieci)

  • wielkość cpu i ramu w size (lista dostępnych compute na stronie digitalocean)

  • vpc_uuid - jak chcemy uruchomić na innej sieci niż nasza

  • user_data plik yaml z konfiguracją pochodzący z katalogu CloudConfigurations/DigitalOcean/_files/cloud-inits

  • pola o wartości true/false takie jak:

    • backups,

    • ipv6,

    • monitoring,

    • resize_disk,

    • droplet_agent

  • tags - określający tagi dla maszyn wirtualnych uruchomionych

  • phone_number - to pole odpowiada za hasło do maszyny wirtualnej gdy nie podamy klucza ssh do podłączenia.

  • parametr ostatni agent steruje czy dodatkowy host slave ma zostać uruchomiony.


Klucze publiczne które możemy dodawać do maszyn wirtualnych znajdziemy w CloudConfigurations/DigitalOcean/_files/ssh_keys/public_keys


Konfigurację cloud init dla hostów Jenkins Master i slave znajdziemy w CloudConfigurations/DigitalOcean/_files/cloud-inits


konfiguracja agenta przedstawia się następująco:


Konfiguracja mastera w następujący sposób:


Jak będziemy mieli ochotę możemy pobawić się w instalacje od zera naszego jenkinsa wtedy wybieramy plik konfiguracyjny dla naszego user_data CloudConfigurations/DigitalOcean/_files/cloud-inits/no_jenkins_docker_tf.tpl


Jest też prosta konfiguracja firewall, która w razie potrzeb możemy edytować:


Konfiguracja otwiera kilka portów i domyślnie śa to porty otwarte dla calego świata 0.0.0.0/0 - możemy to zmienić na własne adresy IP.


Podsumowanie:


W celu uruchomienia wydajemy polecenie terraform apply: Polecenie to tworzy nam Plan: 36 to add, 0 to change, 0 to destroy. Oczywiście zapraszam też do materiału wideo.


Pozdrawiam Piotr Kośka.




23 wyświetlenia0 komentarzy

Ostatnie posty

Zobacz wszystkie

Yorumlar


Śledź nasze wpisy w social media

  • Instagram
  • Facebook
  • Twitter
  • LinkedIn
  • YouTube

Poznaj terraform jedno z najepszych narzedzi do zarządzania infrastrukturą w kodzie (IaC) - w kursie tym przeprowadzam Cię przez proces instalacji i konfiguracji tego narzędzia.

bottom of page