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
- 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ć.
- 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.
- 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.
- Ustawianie domyślnych ustawień konfiguracji gcloud
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- 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
- 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 celów Cloud Deploy
- 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.
- 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
- 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.
- 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
- 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.
- 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.
- 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.
- Otwórz <Cloud Deploy> w konsoli Google Cloud
- Kliknij „sample-app”.
Na tym ekranie zobaczysz graficzną reprezentację potoku.
- Potwierdź zielony kontur po lewej stronie okna podglądu, co oznacza, że wersja została wdrożona w tym środowisku.
- Opcjonalnie przejrzyj dodatkowe informacje o wersji, klikając jej nazwę w sekcji Szczegóły wersji w dolnej sekcji ekranu.
- 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
- Kliknij ikonę podglądu w przeglądarce w prawym górnym rogu ekranu.
- Wybierz podgląd na porcie 8080
Otworzy się nowa strona z komunikatem „Hello World”.
- 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
- Otwórz potok przykładowej aplikacji w konsoli Google Cloud.
- Potwierdź zielony kontur po lewej stronie pudełka Canary, co oznacza, że wersja została wdrożona w tym środowisku.
- 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
- Kliknij ikonę podglądu w przeglądarce w prawym górnym rogu ekranu.
- Wybierz podgląd na porcie 8080
Otworzy się nowa strona z komunikatem „Hello World”.
- 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.
- 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
- Otwórz potok przykładowej aplikacji w konsoli Google Cloud.
- 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.
- Kliknij „Sprawdź”. poniżej żółtego powiadomienia.
- Na następnym ekranie kliknij „Sprawdź” aby wyświetlić ekran zatwierdzania wersji produkcyjnej
- Opcjonalnie przejrzyj różnice w pliku manifestu, aby przejrzeć zmiany. W tym przypadku jest to zupełnie nowy plik.
- Kliknij „Zatwierdź”. przycisk
- 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.
- 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
- Kliknij ikonę podglądu w przeglądarce w prawym górnym rogu ekranu.
- Wybierz podgląd na porcie 8080
Otworzy się nowa strona z komunikatem „Hello World”.
- Aby zakończyć przekierowanie portów, użyj w terminalu numeru
ctrl+c
.