Publikowanie za pomocą Cloud Deploy

1. Cele

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

Proces wdrażania zostanie uruchomiony przez potok cloudbuild, który utworzy wersję Cloud Deploy i wykona wdrożenie w klastrze wersji testowej. Po sprawdzeniu, czy wdrożenie w wersji podglądowej przebiegło pomyślnie i działa zgodnie z oczekiwaniami, ręcznie promujesz wersję w klastrze Canary. Promowanie wersji w klastrze produkcyjnym wymaga zatwierdzenia. Zatwierdź potok produkcyjny w interfejsie Cloud Deploy, a następnie go promuj.

Cele tego samouczka można podzielić na te kroki:

  • Przygotowanie obszaru roboczego
  • Definiowanie celów Cloud Deploy
  • Definiowanie potoku Cloud Deploy
  • Utwórz wersję
  • Promowanie wdrożenia
  • zatwierdzać wersje produkcyjne,

Konfigurowanie środowiska we własnym tempie

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google, i który możesz zaktualizować w dowolnym momencie.
  • Identyfikator projektu musi być niepowtarzalny we wszystkich projektach Google Cloud i jest niezmienny (nie można go zmienić po jego ustawieniu). Konsole Google Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem musisz podać identyfikator projektu (zazwyczaj jest to PROJECT_ID). Jeśli Ci się nie podoba, wygeneruj inny losowy identyfikator lub spróbuj użyć własnego i sprawdź, czy jest dostępny. Następnie po utworzeniu projektu jest „zamrażany”.
  • Istnieje jeszcze trzecia wartość, numer projektu, której używają 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 usługi Cloud. Przejście przez ten Codelab nie powinno wiązać się z wielkimi kosztami, jeśli w ogóle będą jakieś. Aby wyłączyć zasoby i uniknąć opłat po zakończeniu samouczka, wykonaj instrukcje „czyszczenia” podane na końcu ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

2. Konfiguracja platformy

Przygotowywanie obszaru roboczego

Tutaj skonfigurujemy środowisko wymagane do wykonania tego samouczka. Po wykonaniu tego kroku utworzymy klaster GKE, w którym będziemy mogli uruchamiać 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 środowisk docelowych Cloud Deploy

  1. Utwórz w katalogu wdrażania plik o nazwie preview.yaml, używając w Cloud Shell tego polecenia:

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. Utwórz w katalogu wdrażania plik o nazwie canary.yaml, używając w Cloud Shell tego polecenia:

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 deploy plik o nazwie prod.yaml, używając w Cloud Shell tego polecenia:

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ę, że atrybut requireApproval ma wartość true. Nie będzie można przenieść go do wersji produkcyjnej, dopóki nie uzyskasz zgody. 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

W ramach tworzenia nowej aplikacji potok CICD jest zwykle konfigurowany tak, aby wykonywać kompilacje automatyczne, testy integracyjne i wdrażania. Podane niżej 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 deploy plik o nazwie pipeline.yaml, używając w Cloud Shell tego polecenia:

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 stages, który jest listą wszystkich docelowych miejsc, w których przypadku skonfigurowano stosowanie tego potoku danych.

targetId wskazuje konkretny cel, którego należy użyć na tym etapie potoku dostarczania. Wartością jest właściwość metadata.name z definicji docelowej.

profiles to lista co najmniej 1 nazwy profilu Skaffold z pliku skaffold.yaml. Podczas tworzenia wersji Cloud Deploy używa profilu z renderowaniem skaffold.

  1. Zastosuj potok

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

4. Etap rozwoju

W miarę tworzenia aplikacji automatyczne narzędzia CICD będą kompilować i przechowywać komponenty. Aby skompilować aplikację za pomocą skaffolda i przechowywać zasoby na potrzeby wdrażania za pomocą Cloud Deploy, wykonaj podane niżej polecenia. Ten krok jest wykonywany przez proces CICD w przypadku 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

Na końcu procesu CICD, zwykle po otagowaniu kodu na potrzeby wersji produkcyjnej, rozpoczniesz proces publikowania, wywołując polecenie cloud deploy release. Gdy wdrożenie zostanie zweryfikowane i zatwierdzone, możesz przenieść wersję do różnych środowisk docelowych, promując i zatwierdzając działanie za pomocą procesów automatycznych lub ręcznych zatwierdzeń.

Tworzenie wersji

Wcześniej w tym samouczku utworzyliśmy pliki Cloud Deploy, aby pokazać, jak działa ta usługa. Na potrzeby tego samouczka utworzyliśmy te same pliki Cloud Deploy i przesłaliśmy je do repozytorium GitHub z przykładową aplikacją Go. Zastosujemy Cloud Deploy do wydania 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

Po utworzeniu wersji Cloud Deploy jest ona automatycznie wdrażana w pierwszym środowisku docelowym, czyli w wersji podglądowej.

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

Na tym ekranie zobaczysz graficzną reprezentację potoku.

  1. Po lewej stronie pola podglądu powinien pojawić się zielony obrys, co oznacza, że wersja została wdrożona w tym środowisku.
  2. Opcjonalnie możesz sprawdzić dodatkowe informacje o wersji, klikając jej nazwę w sekcji Szczegóły wersji w dolnej części ekranu.
  3. Aby sprawdzić, czy aplikacja została wdrożona, uruchom to polecenie w ClouShell

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. W prawym górnym rogu ekranu kliknij ikonę podglądu w przeglądarce.
  2. Wybierz Podgląd na porcie 8080.

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

  1. Aby zakończyć przekierowanie portu, użyj w terminalu polecenia ctrl+c.

Promowanie wersji

Teraz, gdy wersja została wdrożona w pierwszym środowisku docelowym (w wersji podglądowej) w potoku, możesz ją przenieść do następnego środowiska docelowego (do wczesnego testowania). Aby rozpocząć proces, uruchom podane niżej polecenie.

gcloud beta deploy releases promote \

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

--delivery-pipeline=sample-app \

--quiet

Sprawdzanie promocji dotyczącej wersji

  1. Otwórz przepływ aplikacji przykładowej w konsoli Google Cloud.
  2. Po lewej stronie pola Canary powinien pojawić się zielony kontur, który oznacza, że wersja została wdrożona w tym środowisku.
  3. Sprawdź, czy aplikacja została wdrożona prawidłowo, 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. W prawym górnym rogu ekranu kliknij ikonę podglądu w przeglądarce.
  2. Wybierz Podgląd na porcie 8080.

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

  1. Aby zakończyć przekierowanie portu, użyj w terminalu polecenia ctrl+c.

zatwierdzanie wersji produkcyjnej.

Pamiętaj, że podczas tworzenia środowiska produkcyjnego za pomocą pliku prod.yaml ustawiliśmy wartość tagu requireApproval na „true”. Wymusi to konieczność zatwierdzenia promocji w wersji produkcyjnej.

  1. Aby promować wersję do wczesnych testów do środowiska produkcyjnego, użyj tego polecenia:

gcloud beta deploy releases promote \

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

--delivery-pipeline=sample-app \

--quiet

  1. Otwórz przepływ danych w przykładowej aplikacji w konsoli Google Cloud.
  2. Zwróć uwagę na żółty wskaźnik „1 oczekuje”.

Ten komunikat wskazuje, że wersja jest w kolejce do wdrożenia w wersji produkcyjnej, ale wymaga sprawdzenia i zatwierdzenia.

  1. Kliknij przycisk „Sprawdź” pod żółtym powiadomieniem.
  2. Na następnym ekranie kliknij „Sprawdź” ponownie, aby przejść do ekranu zatwierdzania wersji produkcyjnej.
  3. Opcjonalnie możesz sprawdzić zmiany w pliku manifestu. W tym przypadku jest to zupełnie nowy plik.
  4. Kliknij przycisk „Zatwierdź”.
  5. Wróć na stronę potoku aplikacji przykładowej, aby zobaczyć w trakcie trwania proces publikowania wersji produkcyjnej.

Sprawdzanie wersji produkcyjnej

Podobnie jak w przypadku innych środowisk, po zakończeniu wdrażania możesz sprawdzić jego wyniki, wykonując podane niżej czynności.

  1. Aby utworzyć przekierowanie portu, uruchom to polecenie w Cloud Shell:

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. W prawym górnym rogu ekranu kliknij ikonę podglądu w przeglądarce.
  2. Wybierz Podgląd na porcie 8080.

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

  1. Aby zakończyć przekierowanie portu, użyj w terminalu polecenia ctrl+c.