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
- 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ć.



- 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.
- 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.
- Ustawianie domyślnych ustawień konfiguracji gcloud
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- 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
- Ustawianie zmiennych środowiskowych
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- 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`
- 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
- 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.
- 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
- 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.
- 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
- 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.
- 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.
- 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.
- Otwórz <Cloud Deploy> w konsoli Google Cloud.
- Kliknij „sample-app”.
Na tym ekranie zobaczysz graficzną reprezentację swojego potoku.
- Sprawdź, czy po lewej stronie pola podglądu pojawił się zielony kontur. Oznacza to, że wersja została wdrożona w tym środowisku.
- Możesz też sprawdzić dodatkowe szczegóły wydania, klikając jego nazwę w sekcji Szczegóły wydania w dolnej części ekranu.
- 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
- W prawym górnym rogu ekranu kliknij ikonę podglądu w przeglądarce.
- Wybierz Podgląd na porcie 8080.
Otworzy się nowa strona z komunikatem „Hello World!”.
- Aby zakończyć przekierowanie portu, użyj polecenia
ctrl+cw 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
- Otwórz potok sample-app w konsoli Google Cloud.
- Sprawdź, czy po lewej stronie pola Canary jest zielony kontur. Oznacza to, że wersja została wdrożona w tym środowisku.
- 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
- W prawym górnym rogu ekranu kliknij ikonę podglądu w przeglądarce.
- Wybierz Podgląd na porcie 8080.
Otworzy się nowa strona z komunikatem „Hello World!”.
- Aby zakończyć przekierowanie portu, użyj polecenia
ctrl+cw 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.
- 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
- Otwórz potok sample-app w konsoli Google Cloud.
- 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.
- Kliknij przycisk „Sprawdź” tuż pod żółtym powiadomieniem.
- Na następnym ekranie ponownie kliknij „Sprawdź”, aby przejść do ekranu zatwierdzania wersji produkcyjnej.
- Opcjonalnie możesz sprawdzić różnice w pliku manifestu, aby przejrzeć zmiany. W tym przypadku będzie to zupełnie nowy plik.
- Kliknij przycisk „Zatwierdź”.
- 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.
- 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
- W prawym górnym rogu ekranu kliknij ikonę podglądu w przeglądarce.
- Wybierz Podgląd na porcie 8080.
Otworzy się nowa strona z komunikatem „Hello World!”.
- Aby zakończyć przekierowanie portu, użyj polecenia
ctrl+cw terminalu.