1. Başlamadan önce
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açıp 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 dizesidir ve istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğine (genellikle
PROJECT_ID
olarak tanımlanır) referans vermeniz gerekir. Bu kimliği beğenmezseniz rastgele başka bir kimlik oluşturun veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını kontrol edin. Proje oluşturulduktan sonra ise "dondurulur". - Bazı API'lerin kullandığı üçüncü bir değer de vardır: Proje Numarası. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı olmayacaktır. Bu eğiticinin dışında faturalandırılmamak için kaynakları kapatmak üzere codelab'in sonundaki "temizlik" talimatlarını uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
2. Çalışma alanınızı hazırlama
- Aşağıdaki URL'yi ziyaret ederek Cloud Shell düzenleyiciyi açın
https://ide.cloud.google.com
- Proje adınızın CLI'de 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'a 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ü olarak ayarlayın
cd software-delivery-workshop && rm -rf .git
cd delivery-platform && cloudshell workspace .
3. Önceden tanımlanmış ve özel uygulama şablonlarını kullanma
Geliştiriciler, kuruluş içinde yaygın olarak kullanılan bir dizi şablon arasından seçim yapabilmelidir. İlk katılım işlemi, GitHub hesabınızda depolanan merkezi bir şablon deposu grubu oluşturur. Bu şablon depoları sonraki adımlarda kopyalanıp 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 sonra modellenmiş başka klasörler ekleyerek kendi şablonlarınızı ekleyebilirsiniz.
Bu adımda, sağlanan örnek dosyalardan uygulama şablonlarını barındıracak kendi deponuzu oluşturacaksınız. GitHub ile etkileşimleri basitleştirmek 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ılır.
GitHub Erişimini Yapılandırın
Bu eğitimdeki adımlar, depolar oluşturmak ve yapılandırmak için GitHub API'yi çağırır. Aşağıdaki çeşitli noktalarda GitHub kullanıcı adınız ve kişisel erişim jetonunuz gerekir. Aşağıdaki komut dosyası, değerleri almanıza ve daha sonra kullanmak üzere yerel değişkenler olarak depolamanı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ğinizi gösteren örnek uygulama şablonları sağlanır. Bu adımda, GitHub hesabınızda mcd-app-templates
adlı bir depoda bu dosyaların kendi kopyalarını oluşturursunuz.
- Şablonu çalışma dizinine kopyala
cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR
cd $WORK_DIR/app-templates
- GitHub hesabınızda boş bir uzak depo oluşturma
$BASE_DIR/scripts/git/gh.sh create mcd-app-templates
- Şablon deposunu uzak deponuza gönderme
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 temizleyin
cd $BASE_DIR
rm -rf $WORK_DIR/app-templates
Paylaşılan Temel Yapılandırma Deposu Oluşturma
Bu eğitimde, birden fazla ekip tarafından paylaşılan temel yapılandırma dosyalarını kullanan ve ardından uygulamaya özgü yapılandırmaları üst üste bindiren Kustomize adlı bir araç kullanılmaktadı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 kopyala
cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR
cd $WORK_DIR/shared-kustomize
- GitHub hesabınızda boş bir uzak depo oluşturma
$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize
- Şablon deposunu uzak deponuza gönderme
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 temizleyin
cd $BASE_DIR
rm -rf $WORK_DIR/shared-kustomize
Şablon depolarınız oluşturulduktan sonra bunları kullanarak uygulama örneği oluşturabilirsiniz
4. Uygulamanın yeni bir örneğini oluşturma
Bir şablondan yeni bir uygulama oluşturmak genellikle şablon yapısındaki birden fazla dosyada yer alan yer tutucu değişkenlerin gerçek değerlerle değiştirilmesini gerektirir. Değişim tamamlandıktan sonra yeni uygulama örneği için yeni bir depo oluşturulur. Geliştiricilerin günlük geliştirme çalışmalarında klonlayacağı ve kullanacağı uygulama örneği deposu budur.
Bu adımda, bir uygulama şablonundaki değerleri değiştirecek ve elde edilen 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
İlk katılımda en yaygın ihtiyaçlardan biri, şablonlardaki değişkenleri uygulamada kullanılan gerçek örneklerle değiştirmektir. Örneğin, uygulama adını girmelisiniz. Aşağıdaki komut, ortam değişkenlerinde depolanan değerlere sahip 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ı depolama
- GitHub hesabınızda boş bir uzak depo oluşturma
$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 şimdi sürekli derlemeleri uygulayabilirsiniz.
5. Otomatik ardışık düzen yürütmeyi yapılandırma
Sürekli entegrasyon sisteminin merkezi kısmı, kaynak kontrol sisteminden gelen etkinliklere göre ardışık düzen mantığını yürütme yeteneğidir. Bir geliştirici, deposuna kod gönderdiğinde diğer sistemlerdeki işlemleri tetikleyecek şekilde yapılandırılabilen etkinlikler tetiklenir.
Bu adımda GitHub'ı, kullanıcılar depolarında kod kaydettiğinde veya etiketlediğinde Google Cloud Build'i çağırıp ardışık düzeninizi yürütecek şekilde yapılandıracaksınız.
Güvenli Erişim'i etkinleştirme
Uygulama ardışık düzeninize güvenli erişimi yapılandırmak için 2 öğeye ihtiyacınız vardır. Ardışık düzene özgü bir API anahtarı ve gizli anahtar.
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 en iyi uygulamalardan biri, API anahtarının kapsamını yalnızca istemcinin erişeceği belirli API'lerle kilitlemektir. Anahtarı önceki bir adımda oluşturdunuz.
- 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şine sahip olmalarından emin olmak için kullanılır. GitHub'da yalnızca kendi ardışık düzenlerine erişmesi gereken 2 farklı depoya sahip olabilirsiniz. API_KEY, github tarafından kullanılabilecek API'leri sınırlar (bu durumda Cloud Build API çağrılıyordur). Gizli anahtar ise Cloud Build API'deki hangi işin istemci tarafından yürütülebileceğini sınırlar.
- Gizli anahtar adını, konumunu ve değerini tanımlama
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 verme
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 işlemlerini gerçekten yürütecek yapılandırmadır.
İşin, tetikleyicinin doğru şekilde yapılandırılması için oluşturulurken birkaç anahtar değerinin sağlanması gerekir.
- Tetikleyicinin adını ve yapılandırma dosyasının bulunabileceği yeri 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 otoritesini tanımlayan bir değişken ayarlandı. Aşağıdaki komutla bu değeri gözden geçirin.
echo $IMAGE_REPO
- Daha önce oluşturulan değişkenleri kullanarak CloudBuild Webhook Tetikleyicisi oluşturun. Uygulama deposu konumu, GitHub'daki isteğin gövdesinden alınır. Aşağıdaki değer, istek gövdesinde bulunduğu yola referans verir
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 tetikleyicisini Console'da inceleyin.
- Sonraki adımda GitHub tarafından kullanılacak uç nokta URL'si için bir değişken tanımlayın.
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ılmış webhook'ı 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 tamamladığınıza göre, bu adımları bir komut dosyasında otomatikleştirmenin zamanı geldi.
6. Tüm ilk katılım adımlarını otomatikleştirme
Uygulamada, her yeni uygulama için yukarıdaki adımların her birini uygulamak mümkün değildir. Bunun yerine mantık, kolayca yürütülebilmesi için bir komut dosyasına dahil edilmelidir. Yukarıdaki adımlar, kullanabileceğiniz bir komut dosyasına eklenmiş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, yeni depoyu GitHub'da inceleyebilirsiniz
- Aşağıdaki komutu yürüterek GitHub deposu URL'sini alın
echo ${GIT_BASE_URL}/demo-app
- Yeni uygulamayı incelemek için URL'yi web tarayıcınızla açın
- Şablon değişkenlerinin aşağıdaki URL'de gösterildiği gibi örnek değerlerle değiştirildiği örneklere dikkat edin
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
CloudBuild tetikleyicisini inceleme
Tetikleyici, komut dosyası tarafından otomatik olarak ayarlandı
- Bu bağlantıyı ziyaret ederek Console'da Cloud Build tetikleyicisini inceleyin.
- Derleme geçmişini bu sayfada inceleyin.