체크포인트
Set up your environment
/ 10
Deploy the Spinnaker chart using Kubernetes Helm
/ 20
Building the Docker image
/ 20
Create service load balancers
/ 20
Deploy an image to production
/ 10
Triggering pipeline from code changes
/ 20
Spinnaker 및 Kubernetes Engine을 사용한 지속적 배포 파이프라인
GSP114
이 실습에서는 Google Kubernetes Engine, Google Cloud Source Repositories, Google Cloud Container Builder, Spinnaker를 사용하여 지속적 배포 파이프라인을 만드는 방법을 알려줍니다. 샘플 애플리케이션을 만든 후 이러한 서비스를 구성하여 앱을 자동으로 빌드, 테스트, 배포합니다. 애플리케이션 코드를 수정하면 변경사항으로 인해 지속적 배포 파이프라인이 트리거되어 새 버전이 자동으로 다시 빌드, 테스트, 배포됩니다.
목표
-
Google Cloud Shell을 실행하고, Kubernetes Engine 클러스터를 생성하고, ID 및 사용자 관리 스키마를 구성하여 환경을 설정합니다.
-
샘플 애플리케이션을 다운로드하고 Git 저장소를 만든 후 Google Cloud Source Repository에 업로드합니다.
-
Helm으로 Spinnaker를 Kubernetes Engine에 배포합니다.
-
Docker 이미지를 빌드합니다.
-
애플리케이션이 변경될 때 Docker 이미지를 생성하는 트리거를 만듭니다.
-
Spinnaker 파이프라인을 구성하여 애플리케이션을 안정적이고 지속적으로 Kubernetes Engine에 배포합니다.
-
코드 변경사항을 배포하여 파이프라인을 트리거한 후 프로덕션에 제대로 적용되는지 확인합니다.
파이프라인 아키텍처
사용자에게 애플리케이션 업데이트를 지속적으로 배포하려면 소프트웨어를 안정적으로 빌드, 테스트, 업데이트하는 자동화된 프로세스가 필요합니다. 코드 변경사항이 아티팩트 생성, 단위 테스트, 기능 테스트, 프로덕션 적용을 포함하는 파이프라인 전체에 자동으로 반영되어야 합니다. 경우에 따라서는 코드 업데이트를 전체 사용자층에 푸시하기 전에 실사용 시험을 위해 사용자 중 일부에만 적용할 수도 있어야 합니다. 이러한 카나리아 릴리스 중 하나에서 문제점이 드러날 경우 자동화된 절차를 통해 소프트웨어 변경사항을 빠르게 롤백할 수 있어야 합니다.
Kubernetes Engine과 Spinnaker를 사용하면 개발 및 검증을 거친 소프트웨어를 최대한 빠르게 출시하는 데 도움이 되는 견고한 지속적 배포 흐름을 만들 수 있습니다. 최종 목표는 개발 주기를 더 빠르게 하는 것이지만, 애플리케이션에 수정사항이 있을 때마다 프로덕션 적용을 고려하기 전에 먼저 자동화된 검증 절차 전체를 통과하도록 해야 합니다. 변경사항이 자동화된 테스트를 통과하면 애플리케이션을 수동으로 검사하고 출시 전 테스트를 추가로 수행하면 됩니다.
팀에서 애플리케이션이 프로덕션 준비가 된 것으로 판단하면 팀원 중 한 명이 앱을 프로덕션용으로 배포하도록 승인할 수 있습니다.
애플리케이션 전송 파이프라인
이 실습에서는 아래 다이어그램에 나와 있는 지속적 배포 파이프라인을 빌드해봅니다.
설정 및 요구사항
Qwiklabs 설정
실습 시작 버튼을 클릭하기 전에
다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머에는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지 표시됩니다.
실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 직접 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.
이 실습을 완료하려면 다음을 준비해야 합니다.
- 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
- 실습을 완료하기에 충분한 시간---실습을 시작하고 나면 일시중지할 수 없습니다.
실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법
-
실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 팝업이 열립니다. 왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 패널이 있습니다.
- Google 콘솔 열기 버튼
- 남은 시간
- 이 실습에 사용해야 하는 임시 사용자 인증 정보
- 필요한 경우 실습 진행을 위한 기타 정보
-
Google 콘솔 열기를 클릭합니다. 실습에서 리소스가 가동된 후 로그인 페이지가 표시된 다른 탭이 열립니다.
팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.
참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다. -
필요한 경우 실습 세부정보 패널에서 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다. 다음을 클릭합니다.
-
실습 세부정보 패널에서 비밀번호를 복사하여 시작 대화상자에 붙여넣습니다. 다음을 클릭합니다.
중요: 왼쪽 패널에 표시된 사용자 인증 정보를 사용해야 합니다. Google Cloud Skills Boost 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다. -
이후에 표시되는 페이지를 클릭하여 넘깁니다.
- 이용약관에 동의합니다.
- 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
- 무료 평가판을 신청하지 않습니다.
잠시 후 Cloud 콘솔이 이 탭에서 열립니다.
Cloud Shell 활성화
Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다. Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.
- Google Cloud 콘솔 상단에서 Cloud Shell 활성화 를 클릭합니다.
연결되면 사용자 인증이 이미 처리된 것이며 프로젝트가 PROJECT_ID로 설정됩니다. 출력에 이 세션의 PROJECT_ID를 선언하는 줄이 포함됩니다.
gcloud
는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.
- (선택사항) 다음 명령어를 사용하여 활성 계정 이름 목록을 표시할 수 있습니다.
-
승인을 클릭합니다.
-
다음과 비슷한 결과가 출력됩니다.
출력:
- (선택사항) 다음 명령어를 사용하여 프로젝트 ID 목록을 표시할 수 있습니다.
출력:
출력 예시:
gcloud
전체 문서는 Google Cloud에서 gcloud CLI 개요 가이드를 참조하세요.
환경 설정하기
이 실습에 필요한 인프라 및 ID를 구성합니다. 먼저 Spinnaker 및 샘플 애플리케이션을 배포하기 위한 Kubernetes Engine 클러스터를 만듭니다.
-
기본 컴퓨팅 영역을 설정합니다.
gcloud config set compute/zone us-central1-f
-
Spinnaker 가이드 샘플 애플리케이션을 사용하여 Kubernetes Engine을 만듭니다.
gcloud container clusters create spinnaker-tutorial \
--machine-type=n1-standard-2
클러스터 만들기를 완료하려면 5~10분 정도 걸립니다. 클러스터 프로비저닝이 완료될 때까지 기다렸다가 계속 진행하세요.
완료되면 이름, 위치, 버전, IP 주소, 머신 유형, 노드 버전, 노드 수, 클러스터 상태(클러스터 실행 중으로 표시됨) 등에 관한 자세한 정보가 담긴 보고서가 표시됩니다.
ID 및 액세스 관리 구성
Cloud Identity & Access Management(Cloud IAM) 서비스 계정을 만들어 Spinnaker에 권한을 위임하면 Cloud Storage에 데이터를 저장할 수 있습니다. Spinnaker는 안정성과 복원성을 보장하기 위해 파이프라인 데이터를 Cloud Storage에 저장합니다. Spinnaker 배포가 예기치 않게 실패하면 몇 분 만에 원본과 같은 파이프라인 데이터에 액세스할 수 있는 동일한 배포를 만들 수 있습니다.
다음 단계를 따라 시작 스크립트를 Cloud Storage 버킷에 업로드하세요.
-
서비스 계정을 만듭니다.
gcloud iam service-accounts create spinnaker-account \
--display-name spinnaker-account
-
나중에 명령어에서 사용할 수 있도록 서비스 계정 이메일 주소 및 현재 프로젝트 ID를 환경 변수에 저장합니다.
export SA_EMAIL=$(gcloud iam service-accounts list \
--filter="displayName:spinnaker-account" \
--format='value(email)')
export PROJECT=$(gcloud info --format='value(config.project)')
-
서비스 계정에
storage.admin
역할을 부여합니다.
gcloud projects add-iam-policy-binding $PROJECT \
--role roles/storage.admin \
--member serviceAccount:$SA_EMAIL
-
서비스 계정 키를 다운로드합니다. 이후 단계에서 Spinnaker를 설치하여 Kubernetes Engine에 이 키를 업로드하게 됩니다.
gcloud iam service-accounts keys create spinnaker-sa.json \
--iam-account $SA_EMAIL
(출력)
created key [12f224e036437704b91a571792462ca6fc4cd438] of type [json] as [spinnaker-sa.json] for [spinnaker-account@qwiklabs-gcp-gcpd-f5e16da10e5d.iam.gserviceaccount.com]
Spinnaker 파이프라인을 트리거하는 Cloud Pub/Sub 설정하기
-
Container Registry에서 알림을 위해 Cloud Pub/Sub 주제를 만듭니다.
gcloud pubsub topics create projects/$PROJECT/topics/gcr
-
이미지가 푸시되고 있다는 알림을 받기 위해 Spinnaker에서 읽을 수 있는 구독을 만듭니다.
gcloud pubsub subscriptions create gcr-triggers \
--topic projects/${PROJECT}/topics/gcr
-
Spinnaker의 서비스 계정에 gcr-triggers 구독에서 읽을 수 있는 권한을 부여합니다.
export SA_EMAIL=$(gcloud iam service-accounts list \
--filter="displayName:spinnaker-account" \
--format='value(email)')
gcloud beta pubsub subscriptions add-iam-policy-binding gcr-triggers \
--role roles/pubsub.subscriber --member serviceAccount:$SA_EMAIL
완료된 작업 테스트하기
진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 환경이 성공적으로 설정되었으면 평가 점수가 표시됩니다.
Helm을 사용하여 Spinnaker 배포
이 섹션에서는 Helm을 사용하여 Charts 저장소에서 Spinnaker를 배포합니다. Helm은 Kubernetes 애플리케이션을 구성 및 배포하는 데 사용할 수 있는 패키지 관리자입니다.
Helm 설치
-
helm
바이너리를 다운로드하고 설치합니다.
wget https://get.helm.sh/helm-v3.1.1-linux-amd64.tar.gz
-
로컬 시스템에 파일의 압축을 풉니다.
tar zxfv helm-v3.1.1-linux-amd64.tar.gz
cp linux-amd64/helm .
-
Helm에 클러스터의 cluster-admin 역할을 부여합니다.
kubectl create clusterrolebinding user-admin-binding \
--clusterrole=cluster-admin --user=$(gcloud config get-value account)
-
Spinnaker가 모든 네임스페이스에 리소스를 배포할 수 있도록
cluster-admin
역할을 부여합니다.
kubectl create clusterrolebinding --clusterrole=cluster-admin \
--serviceaccount=default:default spinnaker-admin
-
Helm의 사용 가능한 저장소에 안정화 차트 배포를 추가합니다(Spinnaker 포함).
./helm repo add stable https://charts.helm.sh/stable
./helm repo update
Spinnaker 구성
-
계속해서 Cloud Shell에서 Spinnaker 파이프라인 구성을 저장할 버킷을 만듭니다.
export PROJECT=$(gcloud info \
--format='value(config.project)')
export BUCKET=$PROJECT-spinnaker-config
gsutil mb -c regional -l us-central1 gs://$BUCKET
-
다음 명령어를 실행하여
spinnaker-config.yaml
파일을 생성합니다. 이 파일은 Helm에서 Spinnaker를 어떻게 설치해야 하는지를 기술합니다.
export SA_JSON=$(cat spinnaker-sa.json)
export PROJECT=$(gcloud info --format='value(config.project)')
export BUCKET=$PROJECT-spinnaker-config
cat > spinnaker-config.yaml <<EOF
gcs:
enabled: true
bucket: $BUCKET
project: $PROJECT
jsonKey: '$SA_JSON'
dockerRegistries:
- name: gcr
address: https://gcr.io
username: _json_key
password: '$SA_JSON'
email: 1234@5678.com
# Disable minio as the default storage backend
minio:
enabled: false
# Configure Spinnaker to enable GCP services
halyard:
spinnakerVersion: 1.19.4
image:
repository: us-docker.pkg.dev/spinnaker-community/docker/halyard
tag: 1.32.0
pullSecrets: []
additionalScripts:
create: true
data:
enable_gcs_artifacts.sh: |-
\$HAL_COMMAND config artifact gcs account add gcs-$PROJECT --json-path /opt/gcs/key.json
\$HAL_COMMAND config artifact gcs enable
enable_pubsub_triggers.sh: |-
\$HAL_COMMAND config pubsub google enable
\$HAL_COMMAND config pubsub google subscription add gcr-triggers \
--subscription-name gcr-triggers \
--json-path /opt/gcs/key.json \
--project $PROJECT \
--message-format GCR
EOF
Spinnaker 차트 배포
-
Helm 명령줄 인터페이스를 사용하여 다음과 같이 설정된 구성으로 차트를 배포합니다.
./helm install -n default cd stable/spinnaker -f spinnaker-config.yaml \
--version 2.0.0-rc9 --timeout 10m0s --wait
-
명령어가 완료되면 다음 명령어를 실행하여 Cloud Shell에서 Spinnaker로 포트 전달을 설정합니다.
export DECK_POD=$(kubectl get pods --namespace default -l "cluster=spin-deck" \
-o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace default $DECK_POD 8080:9000 >> /dev/null &
- Spinnaker 사용자 인터페이스를 열려면 Cloud Shell 창 상단에서 웹 미리보기 아이콘을 클릭하고 포트 8080에서 미리보기를 선택합니다.
시작 화면이 표시된 후 Spinnaker 사용자 인터페이스가 표시됩니다.
이 탭을 열어 두면 Spinnaker UI에 액세스할 수 있습니다.
완료된 작업 테스트하기
진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. Kubernetes Helm을 사용하여 Spinnaker 차트를 배포했으면 평가 점수가 표시됩니다.
Docker 이미지 빌드
이 섹션에서는 앱 소스 코드의 변경사항을 감지하고 Docker 이미지를 빌드하여 Container Registry에 푸시하도록 Cloud Build를 구성합니다.
소스 코드 저장소 만들기
-
Cloud Shell 탭에서 샘플 애플리케이션 소스 코드를 다운로드합니다.
gsutil -m cp -r gs://spls/gsp114/sample-app.tar .
-
소스 코드의 압축을 풉니다.
mkdir sample-app
tar xvf sample-app.tar -C ./sample-app
-
디렉터리를 소스 코드로 변경합니다.
cd sample-app
-
이 저장소의 Git 커밋에 대한 사용자 이름과 이메일 주소를 설정합니다.
[USERNAME]
을 생성한 사용자 이름으로 대체합니다.
git config --global user.email "$(gcloud config get-value core/account)"
git config --global user.name "[USERNAME]"
-
소스 코드 저장소에 대한 최초 커밋을 수행합니다.
git init
git add .
git commit -m "Initial commit"
-
코드를 호스팅할 저장소를 만듭니다.
gcloud source repos create sample-app
'이 저장소에 비용이 청구될 수 있습니다'라는 메시지는 무시합니다.
git config credential.helper gcloud.sh
-
새로 만든 저장소를 원격으로 추가합니다.
export PROJECT=$(gcloud info --format='value(config.project)')
git remote add origin https://source.developers.google.com/p/$PROJECT/r/sample-app
-
새 저장소의 마스터 브랜치에 코드를 푸시합니다.
git push origin master
- 탐색 메뉴 > 소스 저장소를 클릭하여 콘솔에서 소스 코드를 볼 수 있는지 확인합니다.
- sample-app을 클릭합니다.
빌드 트리거 구성
소스 저장소에 Git 태그를 푸시할 때마다 Docker 이미지를 빌드하여 푸시하도록 Container Builder를 구성합니다. Container Builder는 자동으로 소스 코드를 체크아웃하고, 저장소의 Dockerfile로 Docker 이미지를 빌드하며, Google Cloud Container Registry에 해당 이미지를 푸시합니다.
-
Cloud Platform Console에서 탐색 메뉴 > Cloud Build > 트리거를 클릭합니다.
-
트리거 만들기를 클릭합니다.
-
다음 트리거 설정을 지정합니다.
-
이름:
sample-app-tags
-
이벤트: 새 태그 푸시
-
새로 만든
sample-app
저장소를 선택합니다. -
태그:
v1.*
-
빌드 구성:
Cloud Build 구성 파일(yaml 또는 json)
-
Cloud Build 구성 파일 위치:
/cloudbuild.yaml
- 만들기를 클릭합니다.
이제부터는 'v' 프리픽스가 있는 Git 태그를 소스 코드 저장소에 푸시할 때마다 Container Builder가 자동으로 애플리케이션을 빌드하여 Docker 이미지로 Container Registry에 푸시합니다.
Spinnaker에서 사용할 Kubernetes 매니페스트 준비
Spinnaker가 Kubernetes 매니페스트를 클러스터에 배포하려면 해당 매니페스트에 대한 액세스 권한이 필요합니다. 이 섹션에서는 지속적 통합(CI) 프로세스 도중에 Cloud Build에서 매니페스트로 채워지는 Cloud Storage 버킷을 만듭니다. 매니페스트가 Cloud Storage에 저장되면 Spinnaker는 파이프라인 실행 중에 이를 다운로드하고 적용할 수 있습니다.
-
버킷을 만듭니다.
export PROJECT=$(gcloud info --format='value(config.project)')
gsutil mb -l us-central1 gs://$PROJECT-kubernetes-manifests
-
버킷에 버전 관리를 사용 설정하여 매니페스트의 기록을 볼 수 있도록 합니다.
gsutil versioning set on gs://$PROJECT-kubernetes-manifests
-
kubernetes 배포 매니페스트에 올바른 프로젝트 ID를 설정합니다.
sed -i s/PROJECT/$PROJECT/g k8s/deployments/*
-
저장소에 대한 변경사항을 커밋합니다.
git commit -a -m "Set project ID"
이미지 빌드
다음 단계에 따라 첫 번째 이미지를 푸시합니다.
-
Cloud Shell의
sample-app
디렉터리에서 계속 Git 태그를 만듭니다.
git tag v1.0.0
-
태그를 푸시합니다.
git push --tags
(출력)
To https://source.developers.google.com/p/qwiklabs-gcp-ddf2925f84de0b16/r/sample-app
* [new tag] v1.0.0 -> v1.0.0
- Cloud Console로 이동합니다. 계속해서 Cloud Build에서 왼쪽 창에 있는 기록을 클릭하여 빌드가 트리거되었는지 확인합니다. 그렇지 않은 경우 이전 섹션에서 트리거를 올바르게 구성했는지 확인합니다.
빌드가 완료될 때까지 이 페이지에서 대기한 후 다음 섹션으로 넘어갑니다.
완료된 작업 테스트하기
진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. Docker 이미지가 빌드되었으면 평가 점수가 표시됩니다.
배포 파이프라인 구성
이제 이미지가 자동으로 빌드되므로, 이미지를 Kubernetes 클러스터에 배포할 차례입니다.
통합 테스트를 위해 규모를 축소한 환경에 배포합니다. 통합 테스트에 성공한 후에는 변경사항을 직접 승인하여 프로덕션 서비스에 코드를 배포해야 합니다.
Spinnaker 관리를 위한 spin CLI 설치하기
spin은 Spinnaker의 애플리케이션 및 파이프라인을 관리하기 위한 명령줄 유틸리티입니다.
-
spin
의 1.14.0 버전을 다운로드합니다.
curl -LO https://storage.googleapis.com/spinnaker-artifacts/spin/1.14.0/linux/amd64/spin
-
spin
실행 파일을 만듭니다.
chmod +x spin
배포 파이프라인 만들기
-
spin을 사용하여 Spinnaker에서 sample이라는 앱을 생성합니다. Spinnaker에서 앱의 소유자 이메일 주소를 설정합니다.
./spin application save --application-name sample \
--owner-email "$(gcloud config get-value core/account)" \
--cloud-providers kubernetes \
--gate-endpoint http://localhost:8080/gate
이제 지속적 배포 파이프라인을 만들 차례입니다. 이 가이드에서는 'v' 프리픽스가 있는 태그를 가진 Docker 이미지가 Container Registry에 도착하는 시점을 감지하도록 파이프라인을 구성합니다.
-
sample-app
소스 코드 디렉터리에서 다음 명령어를 실행하여 Spinnaker 인스턴스에 예시 파이프라인을 업로드합니다.
export PROJECT=$(gcloud info --format='value(config.project)')
sed s/PROJECT/$PROJECT/g spinnaker/pipeline-deploy.json > pipeline.json
./spin pipeline save --gate-endpoint http://localhost:8080/gate -f pipeline.json
파이프라인 실행을 수동으로 트리거하여 확인
방금 만든 구성에서는 새로 태그된 이미지가 푸시되고 있다는 알림을 사용하여 Spinnaker 파이프라인을 트리거합니다. 이전 단계에서는 Cloud Source Repositories에 태그를 푸시하면 여기서 Cloud Build를 트리거하여 이미지를 빌드하고 Container Registry로 이미지를 푸시했습니다. 파이프라인을 확인하려면 수동으로 트리거
합니다.
- Spinnaker UI에서 화면 상단의 애플리케이션을 클릭하면 관리형 애플리케이션의 목록을 확인할 수 있습니다. sample이 애플리케이션입니다. sample이 보이지 않는 경우 Spinnaker 애플리케이션 탭을 새로고침해 보세요.
- sample을 클릭하여 애플리케이션 배포를 확인합니다.
- 상단의 파이프라인을 클릭하여 애플리케이션 파이프라인 상태를 봅니다.
- 수동 실행 시작을 클릭하여 파이프라인을 처음으로 트리거합니다.
-
실행을 클릭합니다.
-
실행 세부정보를 클릭하면 파이프라인의 진행 상황에 대한 자세한 정보를 확인할 수 있습니다.
진행률 표시줄에는 배포 파이프라인의 상태와 단계가 표시됩니다.
파란색은 현재 실행 중인 단계, 녹색은 정상적으로 완료된 단계, 빨간색은 실패한 단계입니다.
- 단계를 클릭하면 세부정보를 볼 수 있습니다.
3~5분이 지나면 통합 테스트 단계가 완료됩니다. 파이프라인을 수동으로 승인해야 배포가 계속 진행됩니다.
- 노란색 '사람' 아이콘에 마우스를 가져가고 계속을 클릭합니다.
프로덕션 프런트엔드 및 백엔드에 배포됩니다. 이 작업은 몇 분 후에 완료됩니다.
- 앱을 확인하려면 Spinnaker UI의 상단에서 인프라 > 부하 분산기를 선택합니다.
-
부하 분산기 목록을 아래로 스크롤하여
service sample-frontend-production
아래의 기본값을 클릭합니다. 페이지 오른쪽에 부하 분산기의 세부정보가 표시됩니다. 세부정보가 표시되지 않으면 브라우저를 새로 고쳐야 할 수 있습니다. -
오른쪽의 세부정보 창을 아래로 스크롤하고 인그레스 IP의 클립보드 버튼을 클릭하여 앱의 IP 주소를 복사합니다. Spinnaker UI의 인그레스 IP 링크는 기본적으로 HTTPS를 사용하지만, 이 애플리케이션은 HTTP를 사용하도록 구성되어 있습니다.
- 새로운 브라우저 탭에 주소를 붙여넣어 애플리케이션을 확인합니다. 카나리아 버전이 표시될 수 있지만 새로 고치면 프로덕션 버전도 표시됩니다.
지금까지 수동으로 파이프라인을 트리거하여 애플리케이션을 빌드, 테스트, 배포해 보았습니다.
완료된 작업 테스트하기
진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 서비스 부하 분산기가 생성되었으면 평가 점수가 표시됩니다.
완료된 작업 테스트하기
진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 프로덕션에 이미지가 배포되었으면 평가 점수가 표시됩니다.
코드 변경으로 파이프라인 트리거하기
이제 코드를 변경하고, Git 태그를 푸시하고, 여기에 따른 응답으로 파이프라인이 실행되는지 확인하는 방법으로 파이프라인에 대한 엔드 투 엔드 테스트를 실행합니다. 'v'로 시작되는 Git 태그를 푸시하면 Container Builder가 트리거되어 새 Docker 이미지를 빌드하고 Container Registry에 푸시합니다. Spinnaker는 'v'로 시작되는 새 이미지 태그를 감지하여 카나리아 환경에 이미지를 배포하고, 테스트를 실행하고, 배포 단계의 모든 pod에 동일한 이미지를 적용하는 파이프라인을 트리거합니다.
-
sample-app 디렉터리에서 앱 색상을 주황색에서 파란색으로 변경합니다.
sed -i 's/orange/blue/g' cmd/gke-info/common-service.go
-
변경사항에 태그를 지정하고 소스 코드 저장소에 푸시합니다.
git commit -a -m "Change color to blue"
git tag v1.0.1
git push --tags
-
Console에서 Cloud Build > 기록으로 이동하여 새 빌드가 표시될 때까지 몇 분 정도 기다립니다. 페이지를 새로고침해야 할 수 있습니다. 새 빌드가 완료될 때까지 기다린 후에 다음 단계로 이동합니다.
-
Spinnaker UI로 돌아와 파이프라인을 클릭하여 파이프라인이 이미지 배포를 시작하는지 확인합니다. 자동으로 트리거된 파이프라인이 표시되는 데 몇 분 정도 걸립니다. 페이지를 새로고침해야 할 수 있습니다.
완료된 작업 테스트하기
진행 상황 확인을 클릭하여 실행한 작업을 확인합니다. 코드 변경으로 파이프라인이 트리거되었으면 평가 점수가 표시됩니다.
카나리아 배포 확인
-
배포가 일시중지되어 프로덕션 적용을 위해 대기 중이면 실행 중인 애플리케이션을 표시하는 웹페이지로 돌아가서 앱이 포함된 탭을 새로고침합니다. 백엔드 중 4개는 이전 버전의 앱을 실행하며 하나의 백엔드만 카나리아를 실행합니다. 따라서 새로고침을 약 5번 수행할 때마다 새로운 파란색 버전의 앱이 표시됩니다.
-
파이프라인이 완료되면 앱이 다음 스크린샷처럼 표시됩니다. 코드 변경으로 인해 색상이 파란색으로 변경되었고, 버전 필드가
canary
로 표시되는 것을 확인할 수 있습니다.
이제 앱이 전체 프로덕션 환경에 정상적으로 출시되었습니다.
-
필요한 경우 이전 커밋을 되돌리면 이 변경사항을 롤백할 수 있습니다. 롤백을 수행하면 새 태그(v1.0.2)가 추가되고 v1.0.1을 배포하는 데 사용한 파이프라인을 통해 다시 푸시됩니다.
git revert v1.0.1
Ctrl+O, Enter 키, Ctrl+X를 차례로 누릅니다.
git tag v1.0.2
git push --tags
- 빌드 후 파이프라인이 완료되면 인프라 > 부하 분산기를 클릭하여 롤백을 확인한 다음 service sample-frontend-production 기본값을 클릭하고 인그레스 IP 주소를 새 탭에 복사합니다.
이제 앱이 주황색 색상으로 돌아오고 production
버전 번호를 확인할 수 있습니다.
수고하셨습니다.
Spinnaker 및 Kubernetes Engine을 사용한 지속적 배포 파이프라인 실습을 완료했습니다.
퀘스트 완료
이 사용자 주도형 실습은 Qwiklabs Google Cloud 솔루션 I: 인프라 확장 및 DevOps 기본 사항 퀘스트의 일부입니다. 퀘스트는 여러 실습을 하나의 학습 과정으로 구성한 것입니다. 이 퀘스트를 완료하면 위의 배지를 얻고 수료를 인증할 수 있습니다. 배지를 공개하고 온라인 이력서 또는 소셜 미디어 계정에 연결할 수 있습니다. 이 실습을 완료했다면 퀘스트에 등록하여 즉시 수료 크레딧을 받으세요. 다른 Qwiklabs 퀘스트도 확인해 보세요.
다음 실습 참여
Google Kubernetes Engine에서 전용 Game Servers 실행으로 퀘스트를 계속 진행하거나 다음 추천 항목을 확인하세요.
다음 단계/자세히 알아보기
- Jenkins를 사용한 지속적 배포 알아보기
- Compute Engine에 Spinnaker를 배포하는 방법 알아보기
- Kubernetes Engine에 Jenkins 배포
- Spinnaker와 Ansible을 사용하여 지속적 배포 실행
Google Cloud 교육 및 자격증
Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.
설명서 최종 업데이트: 2021년 3월 9일
실습 최종 테스트: 2021년 3월 9일
Copyright 2024 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.