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 określi kolejność kroków do wykonania podczas wdrażania w tych środowiskach docelowych.

Proces wdrażania zostanie uruchomiony przez potok cloudbuild, który utworzy wersję Cloud Deploy i przeprowadzi wdrożenie w klastrze podglądu. Po sprawdzeniu, czy wdrożenie w wersji podglądowej zakończyło się pomyślnie i działa zgodnie z oczekiwaniami, ręcznie przenieś wersję do klastra kanaryjnego. Promowanie wersji w klastrze produkcyjnym będzie wymagać zatwierdzenia. Zatwierdzisz potok produkcyjny w interfejsie Cloud Deploy, a następnie go wypromujesz.

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

  • Przygotowywanie obszaru roboczego
  • Definiowanie środowisk docelowych Cloud Deploy
  • Definiowanie potoku Cloud Deploy
  • Utwórz wersję
  • Promowanie wdrożenia
  • Zatwierdzanie wersji produkcyjnej

Samodzielne konfigurowanie środowiska

  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óry nie jest używany przez interfejsy API Google. Możesz go w dowolnym momencie zaktualizować.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i jest niezmienny (nie można go zmienić po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości modułów z kodem musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako 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. Po utworzeniu projektu jest on „zamrażany”.
  • Istnieje też trzecia wartość, czyli numer projektu, którego używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczenia opłat po zakończeniu tego samouczka, postępuj zgodnie z instrukcjami „czyszczenia” 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

Skonfigurujemy tutaj środowisko wymagane do przeprowadzenia 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. Kopiowanie 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. W katalogu wdrożenia utwórz plik o nazwie preview.yaml za pomocą tego polecenia w Cloud Shell:

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, używając tego polecenia w Cloud Shell:

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. W katalogu wdrożenia utwórz plik o nazwie prod.yaml za pomocą tego polecenia w Cloud Shell:

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 requireApproval, który ma wartość „true”. Nie zezwoli to na przeniesienie do środowiska produkcyjnego, dopóki nie zostanie udzielona zgoda. Aby zatwierdzić wersję, musisz mieć rolę roles/clouddeploy.approver.

  1. Tworzenie środowisk docelowych 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 zwykle konfiguruje się potok CICD, który wykonuje automatyczne kompilacje, testy integracyjne i wdrożenia. Poniższe kroki są częścią procesu konfigurowania nowej aplikacji. Każda nowa aplikacja będzie miała skonfigurowany potok wdrażania.

Definiowanie potoku Cloud Deploy

  1. W katalogu deploy utwórz plik o nazwie pipeline.yaml za pomocą tego polecenia w Cloud Shell:

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 miejsc docelowych, w których ma być wdrażany ten potok dostarczania.

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

profiles to lista zawierająca 0 lub więcej nazw profili Skaffold z pliku skaffold.yaml. Cloud Deploy używa profilu z poleceniem skaffold render podczas tworzenia wersji.

  1. Zastosuj potok

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

4. Faza rozwoju

W miarę tworzenia aplikacji zautomatyzowane łańcuchy narzędzi CICD będą kompilować i przechowywać zasoby. Aby skompilować aplikację za pomocą Skaffold i przechowywać komponenty do wdrożenia za pomocą Cloud Deploy, wykonaj te polecenia. Ten krok będzie 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 gdy kod jest oznaczony tagiem do wdrożenia w środowisku produkcyjnym, 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.

Tworzenie wersji

Wcześniej w tym samouczku utworzyliśmy pliki Cloud Deploy, aby poznać działanie Cloud Deploy. Na potrzeby demonstracji utworzyliśmy te same pliki Cloud Deploy i przesłaliśmy je do repozytorium GitHub z przykładową aplikacją w Go. Użyjemy 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 automatycznie wdraża ją w pierwszym środowisku docelowym, czyli w środowisku podglądu.

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

Na tym ekranie zobaczysz graficzną reprezentację swojego potoku.

  1. Sprawdź, czy po lewej stronie pola podglądu pojawił się zielony kontur. Oznacza to, że wersja została wdrożona w tym środowisku.
  2. Możesz też sprawdzić dodatkowe szczegóły wydania, klikając jego nazwę w sekcji Szczegóły wydania w dolnej części ekranu.
  3. Aby sprawdzić, czy wersja została wdrożona, uruchom to polecenie w Cloud Shell:

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 polecenia ctrl+c w terminalu.

Promowanie wersji

Wersja została wdrożona w pierwszym środowisku docelowym (wersja testowa) w potoku, więc możesz ją promować do następnego środowiska docelowego (wersja do wczesnych testów). Aby rozpocząć proces, uruchom to polecenie.

gcloud beta deploy releases promote \

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

--delivery-pipeline=sample-app \

--quiet

Sprawdź promocję wersji

  1. Otwórz potok sample-app w konsoli Google Cloud.
  2. Sprawdź, czy po lewej stronie pola Canary jest zielony kontur. Oznacza to, że wersja została wdrożona w tym środowisku.
  3. Sprawdź, czy aplikacja została prawidłowo 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. 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 polecenia ctrl+c w terminalu.

Zatwierdzanie wersji produkcyjnej

Pamiętaj, że podczas tworzenia środowiska docelowego prod za pomocą pliku prod.yaml ustawiliśmy wartość tagu requireApproval na true. Wymusi to zatwierdzanie przed promowaniem w środowisku produkcyjnym.

  1. Promuj wersję do wczesnych testów w środowisku produkcyjnym za pomocą tego polecenia:

gcloud beta deploy releases promote \

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

--delivery-pipeline=sample-app \

--quiet

  1. Otwórz potok sample-app w konsoli Google Cloud.
  2. Zwróć uwagę na żółty wskaźnik z informacją „1 oczekujące”.

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

  1. Kliknij przycisk „Sprawdź” tuż pod żółtym powiadomieniem.
  2. Na następnym ekranie ponownie kliknij „Sprawdź”, aby przejść do ekranu zatwierdzania wersji produkcyjnej.
  3. Opcjonalnie możesz sprawdzić różnice w pliku manifestu, aby przejrzeć zmiany. W tym przypadku będzie to zupełnie nowy plik.
  4. Kliknij przycisk „Zatwierdź”.
  5. Wróć na stronę potoku aplikacji przykładowej, na której zobaczysz, że wdrażanie wersji produkcyjnej jest w toku.

Sprawdzanie wersji produkcyjnej

Podobnie jak w przypadku innych środowisk możesz sprawdzić wdrożenie po jego zakończeniu, wykonując czynności opisane poniżej.

  1. Aby utworzyć przekierowanie portów, uruchom w Cloud Shell to 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. 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 polecenia ctrl+c w terminalu.