Publikowanie z Cloud Deploy

1. Cele

W tym samouczku utworzysz 3 klastry GKE o nazwach „preview”, „canary” i „prod”. Następnie utwórz środowisko docelowe Cloud Deploy odpowiadające każdemu klastrowi oraz potok Cloud Deploy, który określi sekwencję kroków do wykonania wdrożenia w tych środowiskach docelowych.

Przepływ wdrażania zostanie aktywowany przez potok Cloudbuild, który utworzy wersję Cloud Deploy i przeprowadzi wdrożenie w klastrze przedpremierowym. Gdy upewnisz się, że wdrożenie w wersji testowej zostało zakończone i działa zgodnie z oczekiwaniami, ręcznie awansujesz wersję w klastrze do wczesnych testów. Promowanie wersji w klastrze produkcyjnym będzie wymagało zatwierdzenia. Musisz zatwierdzić potok produkcyjny w interfejsie Cloud Deploy i na koniec go awansować.

Cele tego samouczka można podzielić na następujące etapy:

  • Przygotowywanie obszaru roboczego
  • Definiowanie celów Cloud Deploy
  • Definiowanie potoku Cloud Deploy
  • Utwórz wersję
  • Awansowanie wdrożenia
  • Zatwierdzanie wersji produkcyjnej

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google i w każdej chwili możesz go zaktualizować.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz odwoływać się do identyfikatora projektu (który zwykle nazywa się PROJECT_ID), więc jeśli Ci się nie podoba, wygeneruj kolejny losowy projekt lub wypróbuj swój własny identyfikator i sprawdź, czy jest dostępny. Potem urządzenie jest „zawieszone”. po utworzeniu projektu.
  • Występuje trzecia wartość – numer projektu – używany przez niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów i interfejsów API Cloud. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, wykonaj czynności „wyczyść” znajdziesz na końcu tego ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

2. Konfiguracja platformy

Przygotowuję obszar roboczy

Skonfigurujemy tutaj środowisko wymagane do uruchomienia tego samouczka. Po zakończeniu tego kroku utworzymy klaster GKE, w którym będziemy mogli uruchomić wdrożenia.

  1. Ustawianie domyślnych ustawień konfiguracji gcloud

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. Klonowanie repozytorium

git clone https://github.com/gushob21/software-delivery-workshop

cd software-delivery-workshop/labs/cloud-deploy/

cloudshell workspace .

rm -rf deploy && mkdir deploy

  1. Ustawianie zmiennych środowiskowych

export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")

  1. włączyć interfejsy API,

gcloud services enable \

cloudresourcemanager.googleapis.com \

    `container.googleapis.com \`

    `cloudbuild.googleapis.com \`

    `containerregistry.googleapis.com \`

    `secretmanager.googleapis.com \`

    `clouddeploy.googleapis.com` 
  1. Tworzenie klastrów GKE
     `gcloud container clusters create preview \`
    

--zone=us-central1-a --async

    `gcloud container clusters create canary \`

--zone=us-central1-b --async

    `gcloud container clusters create prod \`

--zone=us-central1-c

Definiowanie celów Cloud Deploy

  1. Utwórz w katalogu wdrożenia plik o nazwie preview.yaml za pomocą tego polecenia w cloudshell:

cat <<EOF >deploy/preview.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: Target

metadata:

name: preview

annotations: {}

labels: {}

description: Target for preview environment

gke:

cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview

EOF

    As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
  1. W katalogu wdrożenia utwórz plik o nazwie canary.yaml za pomocą następującego polecenia w Cloudshell:

cat <<EOF >deploy/canary.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: Target

metadata:

name: canary

annotations: {}

labels: {}

description: Target for canary environment

gke:

cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary

EOF

  1. Utwórz w katalogu wdrożenia plik prod.yaml za pomocą następującego polecenia w cloudshell:

cat <<EOF >deploy/prod.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: Target

metadata:

name: prod

annotations: {}

labels: {}

description: Target for prod environment

requireApproval: true

gke:

cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod

EOF

Zwróć uwagę na tag requiredApproval, który ma wartość true (prawda). Dopóki nie przyznasz zatwierdzenia, nie będzie możliwe awansowanie do produkcyjnego środowiska docelowego. Aby zatwierdzić wersję, musisz mieć rolę roles/clouddeploy.approver.

  1. Tworzenie celów wdrożenia
         `gcloud config set deploy/region us-central1` 
    

gcloud beta deploy apply --file deploy/preview.yaml

gcloud beta deploy apply --file deploy/canary.yaml

gcloud beta deploy apply --file deploy/prod.yaml

3. Tworzenie aplikacji

Podczas tworzenia nowej aplikacji potok CICD jest zwykle konfigurowany w celu przeprowadzania automatycznych kompilacji, testowania integracji i wdrażania. Poniższe kroki są częścią procesu konfiguracji nowej aplikacji. Każda nowa aplikacja będzie miała skonfigurowany potok wdrażania.

Definiowanie potoku Cloud Deploy

  1. Utwórz w katalogu wdrożenia plik o nazwie potok.yaml za pomocą następującego polecenia w Cloudshell:

cat <<EOF >>deploy/pipeline.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: DeliveryPipeline

metadata:

name: sample-app

labels:

`app: sample-app`

description: delivery pipeline

serialPipeline:

stages:

- targetId: preview

`profiles:`

`- preview`

- targetId: canary

`profiles:`

`- canary`

- targetId: prod

`profiles:`

`- prod`

EOF

    As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.

Tag serialPipeline zawiera tag o nazwie „Etapy”. Jest to lista wszystkich środowisk docelowych, w których skonfigurowano proces wdrażania tego potoku dostarczania.

targetId określa konkretne środowisko docelowe, które ma być używane na tym etapie potoku dostarczania. Wartość to właściwość metadata.name z definicji docelowej.

profiles to lista bez lub więcej nazw profili Skaffold z pliku skaffold.yaml. Cloud Deploy podczas tworzenia wersji używa profilu z renderowaniem skaffold.

  1. Zastosuj potok

gcloud beta deploy apply --file deploy/pipeline.yaml

4. Etap programowania

W miarę tworzenia aplikacji zautomatyzowane łańcuchy narzędzi CICD będą tworzyć i przechowywać zasoby. Poniższe polecenia są wykonywane w celu skompilowania aplikacji za pomocą skaffold i zapisania zasobów na potrzeby wdrożenia w Cloud Deploy. Ten krok byłby wykonywany przez proces CICD dla każdej kompilacji aplikacji.

  1. Kompilowanie i przechowywanie aplikacji za pomocą skaffold

skaffold build \

--file-output=artifacts.json \

--default-repo gcr.io/$PROJECT_ID \

--push=true

5. Faza wydania

Po zakończeniu procesu CICD, zwykle gdy kod jest oznaczony jako produkcyjny, zainicjujesz proces publikowania, wywołując polecenie cloud deploy release. Później, po zweryfikowaniu i zatwierdzeniu wdrożenia, będzie można przenieść wersję do różnych środowisk docelowych, awansując i zatwierdzając działanie za pomocą automatycznych procesów lub ręcznego zatwierdzania.

Tworzę wersję

Utworzyliśmy wcześniej pliki Cloud Deploy w tym samouczku, aby lepiej zrozumieć, jak działa Cloud Deploy. Na potrzeby wersji demonstracyjnej utworzyliśmy te same pliki Cloud Deploy i przenieśliśmy je do repozytorium GitHub z przykładową aplikacją w go. Użyjemy Cloud Deploy do opublikowania tej aplikacji.

export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')

gcloud beta deploy releases create \

sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--description="Release demo" \

--build-artifacts=artifacts.json \

--annotations="release-id=rel-${REL_TIMESTAMP}"

Sprawdzanie wersji

Gdy tworzona jest wersja Cloud Deploy, jest ona automatycznie wdrażana w pierwszym środowisku docelowym, które jest w wersji testowej.

  1. Otwórz <Cloud Deploy> w konsoli Google Cloud
  2. Kliknij „sample-app”.

Na tym ekranie zobaczysz graficzną reprezentację potoku.

  1. Potwierdź zielony kontur po lewej stronie okna podglądu, co oznacza, że wersja została wdrożona w tym środowisku.
  2. Opcjonalnie przejrzyj dodatkowe informacje o wersji, klikając jej nazwę w sekcji Szczegóły wersji w dolnej sekcji ekranu.
  3. Sprawdź, czy wersja poprawnie wdrożyła aplikację; uruchom w niej następujące polecenie

gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080

  1. Kliknij ikonę podglądu w przeglądarce w prawym górnym rogu ekranu.
  2. Wybierz podgląd na porcie 8080

Otworzy się nowa strona z komunikatem „Hello World”.

  1. Aby zakończyć przekierowanie portów, użyj w terminalu numeru ctrl+c.

Promowanie wydania

Po wdrożeniu wersji w pierwszym miejscu docelowym (wersja testowa) w potoku możesz awansować ją do następnego środowiska docelowego (do wczesnych testów). Uruchom następujące polecenie, aby rozpocząć proces.

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

Sprawdzanie promocji dotyczącej wersji

  1. Otwórz potok przykładowej aplikacji w konsoli Google Cloud.
  2. Potwierdź zielony kontur po lewej stronie pudełka Canary, co oznacza, że wersja została wdrożona w tym środowisku.
  3. Sprawdź, czy aplikacja została poprawnie wdrożona, tworząc do niej tunel

gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080

  1. Kliknij ikonę podglądu w przeglądarce w prawym górnym rogu ekranu.
  2. Wybierz podgląd na porcie 8080

Otworzy się nowa strona z komunikatem „Hello World”.

  1. Aby zakończyć przekierowanie portów, użyj w terminalu numeru ctrl+c.

Zatwierdzanie wersji produkcyjnej

Pamiętaj, że podczas tworzenia produkcyjnego miejsca docelowego za pomocą pliku prod.yaml określiliśmy wartość parametru requirementsApproval o wartości true. Spowoduje to wymuszenie zatwierdzenia promocji w produktach.

  1. Awansuj wersję do wczesnych testów do środowiska produkcyjnego, używając tego polecenia

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

  1. Otwórz potok przykładowej aplikacji w konsoli Google Cloud.
  2. Zwróć uwagę na żółty wskaźnik „1 oczekująca”.

Ten komunikat oznacza, że istnieje kolejka wersji do wdrożenia w środowisku produkcyjnym, ale wymaga ona sprawdzenia i zatwierdzenia.

  1. Kliknij „Sprawdź”. poniżej żółtego powiadomienia.
  2. Na następnym ekranie kliknij „Sprawdź” aby wyświetlić ekran zatwierdzania wersji produkcyjnej
  3. Opcjonalnie przejrzyj różnice w pliku manifestu, aby przejrzeć zmiany. W tym przypadku jest to zupełnie nowy plik.
  4. Kliknij „Zatwierdź”. przycisk
  5. Wróć na stronę potoku sample-app, na której zobaczysz informacje o przekazywaniu wersji do produkcji.

Sprawdzanie wersji produkcyjnej

Tak jak w przypadku innych środowisk, po zakończeniu wdrożenia możesz sprawdzić, czy wdrożenie się zakończy, wykonując czynności opisane poniżej.

  1. Aby utworzyć przekierowanie portów, uruchom w Cloud Shell następujące polecenie:

gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080

  1. Kliknij ikonę podglądu w przeglądarce w prawym górnym rogu ekranu.
  2. Wybierz podgląd na porcie 8080

Otworzy się nowa strona z komunikatem „Hello World”.

  1. Aby zakończyć przekierowanie portów, użyj w terminalu numeru ctrl+c.