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
- 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ó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.
- 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.
- 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 środowisk docelowych Cloud Deploy
- 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.
- 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
- 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.
- 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
- 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.
- 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.
- 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.
- W konsoli Google Cloud otwórz <Cloud Deploy>.
- Kliknij „sample-app”.
Na tym ekranie zobaczysz graficzną reprezentację potoku.
- Po lewej stronie pola podglądu powinien pojawić się zielony obrys, co oznacza, że wersja została wdrożona w tym środowisku.
- Opcjonalnie możesz sprawdzić dodatkowe informacje o wersji, klikając jej nazwę w sekcji Szczegóły wersji w dolnej części ekranu.
- 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
- 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 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
- Otwórz przepływ aplikacji przykładowej w konsoli Google Cloud.
- Po lewej stronie pola Canary powinien pojawić się zielony kontur, który oznacza, że wersja została wdrożona w tym środowisku.
- 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
- 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 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.
- 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
- Otwórz przepływ danych w przykładowej aplikacji w konsoli Google Cloud.
- 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.
- Kliknij przycisk „Sprawdź” pod żółtym powiadomieniem.
- Na następnym ekranie kliknij „Sprawdź” ponownie, aby przejść do ekranu zatwierdzania wersji produkcyjnej.
- Opcjonalnie możesz sprawdzić zmiany w pliku manifestu. W tym przypadku jest to zupełnie nowy plik.
- Kliknij przycisk „Zatwierdź”.
- 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.
- 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
- 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 w terminalu polecenia
ctrl+c
.