1. Başlamadan önce
Yönlendirmesiz ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.



- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizisidir ve istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalı ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Bu nedenle, beğenmezseniz başka bir rastgele kimlik oluşturabilir veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını görebilirsiniz. Proje oluşturulduktan sonra bu değer "dondurulur". - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları kapatmak üzere codelab'in sonunda bulunan "temizleme" talimatlarını uygulayın. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
2. Çalışma alanınızı hazırlama
- Aşağıdaki URL'yi ziyaret ederek Cloud Shell Düzenleyici'yi açın.
https://ide.cloud.google.com
- Proje adınızın CLI'da ayarlandığından emin olun.
gcloud config set project {{project-id}}
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
- API'leri etkinleştir
gcloud services enable \
cloudbuild.googleapis.com \
secretmanager.googleapis.com
- CloudDeploy'e hak verme
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.admin ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/container.developer ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/iam.serviceAccountUser ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.jobRunner ${PROJECT_ID}
- Terminal penceresinde, aşağıdaki komutu kullanarak uygulama kaynağını klonlayın:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- Dizine geçin ve IDE çalışma alanını depo köküne ayarlayın.
cd software-delivery-workshop && rm -rf .git
cd delivery-platform && cloudshell workspace .
3. Önceden tanımlanmış ve özel uygulama şablonlarından yararlanma
Geliştiriciler, kuruluş içinde en çok tercih edilen bir dizi şablon arasından seçim yapabilmelidir. Oryantasyon süreci, GitHub hesabınızda depolanan merkezi bir şablon depoları grubu oluşturur. Sonraki adımlarda bu şablon depoları kopyalanır ve yeni uygulamaların temeli olarak kullanılmak üzere değiştirilir. Bu laboratuvarda, şablon deponuzu burada sağlanan örnek bir yapıyla dolduracaksınız. Örnekten modellenmiş ek klasörler ekleyerek kendi şablonlarınızı oluşturabilirsiniz.
Bu adımda, sağlanan örnek dosyalardan uygulama şablonlarını barındıracak kendi deponuzu oluşturacaksınız. GitHub ile etkileşimleri kolaylaştırmak için bir yardımcı komut dosyası sağlanır.
Bunlar, şablon depolarınızı doldurmak için kullanılan tek seferlik adımlardır. Gelecekteki adımlarda bu depolar yeniden kullanılacak.
GitHub erişimini yapılandırma
Bu eğitimdeki adımlarda, depolar oluşturmak ve yapılandırmak için GitHub API'si çağrılır. GitHub kullanıcı adınız ve kişisel erişim jetonunuz, sonraki çeşitli noktalarda gereklidir. Aşağıdaki komut dosyası, değerleri edinmenize ve daha sonra kullanmak üzere yerel değişkenler olarak saklamanıza yardımcı olur.
source ./onboard-env.sh
echo Git Username: $GIT_USERNAME
echo Git Base URL: $GIT_BASE_URL
Uygulama şablonu deposu oluşturma
Bu laboratuvarla birlikte, kendi temel şablonlarınızı nasıl entegre edebileceğinize dair bir örnek olarak örnek uygulama şablonları sağlanır. Bu adımda, GitHub hesabınızda mcd-app-templates adlı bir depoda bu dosyaların kendi kopyanızı oluşturursunuz.
- Şablonu çalışma dizinine kopyalayın.
cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR
cd $WORK_DIR/app-templates
- GitHub hesabınızda boş bir uzak depo oluşturun
$BASE_DIR/scripts/git/gh.sh create mcd-app-templates
- Şablon deposunu uzak deponuza aktarın.
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/mcd-app-templates
git push origin main
- Çalışma dizinini temizleme
cd $BASE_DIR
rm -rf $WORK_DIR/app-templates
Paylaşılan temel yapılandırmalar deposu oluşturma
Bu eğitimde, birden fazla ekip tarafından paylaşılan temel yapılandırma dosyalarını kullanan ve ardından uygulama özel yapılandırmalarını yerleştiren Kustomize adlı bir araçtan yararlanılır. Bu sayede platform ekipleri, birçok ekip ve ortamda ölçeklenebilir.
Bu adımda, sağlanan örneklerden mcd-shared_kustomize adlı paylaşılan yapılandırma deposunu oluşturursunuz.
- Şablonu çalışma dizinine kopyalayın.
cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR
cd $WORK_DIR/shared-kustomize
- GitHub hesabınızda boş bir uzak depo oluşturun
$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize
- Şablon deposunu uzak deponuza aktarın.
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/mcd-shared_kustomize
git push origin main
- Çalışma dizinini temizleme
cd $BASE_DIR
rm -rf $WORK_DIR/shared-kustomize
Şablon depolarınız oluşturulduktan sonra bunları kullanarak bir uygulama örneği oluşturabilirsiniz.
4. Uygulamanın yeni bir örneğini oluşturma
Şablondan yeni bir uygulama oluşturmak genellikle şablon yapısındaki birden fazla dosyada yer tutucu değişkenlerin gerçek değerlerle değiştirilmesini gerektirir. Değiştirme işlemi tamamlandıktan sonra yeni uygulama örneği için yeni bir depo oluşturulur. Geliştiriciler, günlük geliştirmelerinde bu uygulama örneği deposunu klonlayıp kullanır.
Bu adımda, bir uygulama şablonundaki değerleri değiştirecek ve ortaya çıkan dosyaları yeni bir depoya göndereceksiniz.
Yeni uygulama için bir ad tanımlayın.
export APP_NAME=my-app
Golang şablon deposunu alma
cd $WORK_DIR/
git clone -b main $GIT_BASE_URL/mcd-app-templates app-templates
rm -rf app-templates/.git
cd app-templates/golang
Yer tutucu değerleri değiştirme
Onboarding ile ilgili en yaygın ihtiyaçlardan biri, şablonlardaki değişkenlerin uygulamada kullanılan gerçek örneklerle değiştirilmesidir. Örneğin, uygulama adını belirtme. Aşağıdaki komut, ortam değişkenlerinde depolanan değerlerle tüm .tmpl dosyalarının örneklerini oluşturur.
for template in $(find . -name '*.tmpl'); do envsubst < ${template} > ${template%.*}; done
Yeni bir depo oluşturup güncellenen dosyaları depolayın.
- GitHub hesabınızda boş bir uzak depo oluşturun
$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}
- Şablon deposunu uzak deponuza aktarın.
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/${APP_NAME}
git push origin main
Uygulama örneği oluşturulduğuna göre artık sürekli derlemeleri uygulayabilirsiniz.
5. Otomatik ardışık düzen yürütmesini yapılandırma
Sürekli entegrasyon sisteminin merkezi kısmı, kaynak kontrol sisteminde ortaya çıkan etkinliklere göre işlem hattı mantığını yürütme özelliğidir. Bir geliştirici, deposunda kod işlediğinde diğer sistemlerdeki süreçleri tetikleyecek şekilde yapılandırılabilen etkinlikler tetiklenir.
Bu adımda, kullanıcılar depolarına kod kaydettiğinde veya kodlarını etiketlediğinde Google Cloud Build'u çağırıp işlem hattınızı yürütecek şekilde GitHub'ı yapılandıracaksınız.
Güvenli erişimi etkinleştirme
Uygulama işlem hattınıza güvenli erişimi yapılandırmak için 2 öğeye ihtiyacınız vardır. API anahtarı ve işlem hattına özgü bir sır.
API Anahtarı
API anahtarı, belirli bir API'yi çağıran istemciyi tanımlamak için kullanılır. Bu durumda istemci GitHub olur. Burada ele alınmayan bir en iyi uygulama, API anahtarının kapsamını yalnızca istemcinin erişeceği belirli API'lerle sınırlamaktır. Anahtarı önceki bir adımda oluşturmuş olmanız gerekir.
- Bu bağlantıyı tıklayarak anahtarı inceleyebilirsiniz.
- Aşağıdaki komutu çalıştırarak değerin ayarlandığından emin olabilirsiniz.
echo $API_KEY_VALUE
Ardışık Düzen Gizli Anahtarı
Gizli anahtarlar, arayanı yetkilendirmek ve belirli bir Cloud Build hedef işi için haklara sahip olmasını sağlamak amacıyla kullanılır. GitHub'da yalnızca kendi işlem hatlarına erişmesi gereken 2 farklı deponuz olabilir. API_KEY, GitHub tarafından hangi API'lerin kullanılabileceğini sınırlandırırken (bu durumda Cloud Build API çağrılıyor) secret, Cloud Build API'de hangi işin istemci tarafından yürütülebileceğini sınırlar.
- Gizli anahtarın adını, konumunu ve değerini tanımlayın
SECRET_NAME=${APP_NAME}-webhook-trigger-cd-secret
SECRET_PATH=projects/${PROJECT_NUMBER}/secrets/${SECRET_NAME}/versions/1
SECRET_VALUE=$(sed "s/[^a-zA-Z0-9]//g" <<< $(openssl rand -base64 15))
- Gizli anahtarı oluşturma
printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-
- Cloud Build'in gizli anahtarı okumasına izin verin
gcloud secrets add-iam-policy-binding ${SECRET_NAME} \
--member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com \
--role='roles/secretmanager.secretAccessor'
Cloud Build tetikleyicisi oluşturma
Cloud Build tetikleyicisi, CICD süreçlerini gerçekten yürütecek olan yapılandırmadır.
İşin tetikleyiciyi düzgün şekilde yapılandırmak için oluşturulurken birkaç temel değerin sağlanması gerekir.
- Tetikleyicinin adını ve yapılandırma dosyasının nerede bulunabileceğini tanımlayın.
export TRIGGER_NAME=${APP_NAME}-clouddeploy-webhook-trigger
export BUILD_YAML_PATH=$WORK_DIR/app-templates/golang/build/cloudbuild-cd.yaml
- Paylaşılan temel yapılandırma deposunun konumunu tanımlayın.
export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize
- Onboard-env.sh komut dosyasında, projenin kapsayıcı kayıt defterini tanımlayan bir değişken ayarlanmıştır. Aşağıdaki komutla değeri inceleyin.
echo $IMAGE_REPO
- Daha önce oluşturulan değişkenleri kullanarak Cloud Build Webhook Tetikleyicisi oluşturun. Uygulama deposu konumu, GitHub'dan gelen isteğin gövdesinden alınır. Aşağıdaki değer, istek gövdesinde bulunduğu yolu ifade eder.
gcloud alpha builds triggers create webhook \`--name=${TRIGGER_NAME} \` `--substitutions='_APP_NAME='${APP_NAME}',_APP_REPO=$(body.repository.git_url),_CONFIG_REPO='${GIT_BASE_URL}'/'${CLUSTER_CONFIG_REPO}',_DEFAULT_IMAGE_REPO='${IMAGE_REPO}',_KUSTOMIZE_REPO='${GIT_BASE_URL}'/'${SHARED_KUSTOMIZE_REPO}',_REF=$(body.ref)' \` `--inline-config=$BUILD_YAML_PATH \` `--secret=${SECRET_PATH}` - Bu bağlantıyı ziyaret ederek yeni oluşturulan Cloud Build derleme tetikleyicisini Console'da inceleyin.
- Uç nokta URL'si için bir değişken tanımlayın. Bu değişken, sonraki adımda GitHub tarafından kullanılacaktır.
WEBHOOK_URL="https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY_VALUE}&secret=${SECRET_VALUE}"
GitHub Webhook'unu yapılandırma
- GitHub'da webhook'u yapılandırma
$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL
- Uygulama deposuna gidip yeni yapılandırılan webhook'u inceleyin.
REPO_URL=${GIT_BASE_URL}/${APP_NAME}/settings/hooks
echo $REPO_URL
Yeni bir uygulama oluşturmak için gereken tüm adımları manuel olarak gerçekleştirdiğinize göre artık bu adımları bir komut dosyasında otomatikleştirebilirsiniz.
6. Tüm oryantasyon adımlarını otomatikleştirme
Uygulamada, yukarıdaki adımların her birini her yeni uygulama için yürütmek mümkün değildir. Bunun yerine, kolayca yürütülebilmesi için mantığın bir komut dosyasına dahil edilmesi gerekir. Yukarıdaki adımlar, kullanımınız için bir komut dosyasına zaten dahil edilmiştir.
Bu adımda, yeni bir uygulama oluşturmak için sağlanan komut dosyasını kullanacaksınız.
Yeni uygulama oluşturma
- Doğru dizinde olduğunuzdan emin olun.
cd $BASE_DIR
- Yeni uygulama oluşturma
export APP_NAME=demo-app
./app.sh create ${APP_NAME}
Tüm adımlar otomatik olarak yürütülür.
GitHub deposunu inceleyin
Bu noktada, GitHub'daki yeni depoyu inceleyebilirsiniz.
- Aşağıdaki komutu çalıştırarak GitHub depo URL'sini alın.
echo ${GIT_BASE_URL}/demo-app
- Yeni uygulamayı incelemek için URL'yi web tarayıcınızda açın.
- Şablon değişkenlerinin aşağıdaki URL'de gösterildiği gibi örnek değerlerle değiştirildiği örnekleri inceleyin.
echo ${GIT_BASE_URL}/demo-app/blob/main/k8s/prod/deployment.yaml#L24
- Aşağıdaki URL'de yapılandırılan web kancasını inceleyin.
echo ${GIT_BASE_URL}/demo-app/settings/hooks
Cloud Build tetikleyicisini inceleyin
Tetikleyici, komut dosyası tarafından otomatik olarak ayarlandı
- Bu bağlantıyı ziyaret ederek Console'daki Cloud Build derleme tetikleyicisini inceleyin.
- Derleme geçmişini bu sayfada inceleyin.