Uygulamaya İlk Katılım

1. Başlamadan önce

Kendi hızınızda ortam kurulumu

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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

  1. Aşağıdaki URL'yi ziyaret ederek Cloud Shell düzenleyiciyi açın

https://ide.cloud.google.com

  1. 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)')

  1. API'leri etkinleştir

gcloud services enable \

cloudbuild.googleapis.com \

secretmanager.googleapis.com

  1. 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}

  1. Terminal penceresinde, aşağıdaki komutu kullanarak uygulama kaynağını klonlayın:

git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git

  1. 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.

  1. Şablonu çalışma dizinine kopyala

cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR

cd $WORK_DIR/app-templates

  1. GitHub hesabınızda boş bir uzak depo oluşturma

$BASE_DIR/scripts/git/gh.sh create mcd-app-templates

  1. Ş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

  1. Ç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.

  1. Şablonu çalışma dizinine kopyala

cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR

cd $WORK_DIR/shared-kustomize

  1. GitHub hesabınızda boş bir uzak depo oluşturma

$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize

  1. Ş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

  1. Ç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

  1. GitHub hesabınızda boş bir uzak depo oluşturma

$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}

  1. Ş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.

  1. Bu bağlantıyı tıklayarak anahtarı inceleyebilirsiniz.
  2. 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.

  1. 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))

  1. Gizli anahtarı oluşturma

printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-

  1. 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.

  1. 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

  1. Paylaşılan temel yapılandırma deposunun konumunu tanımlayın.

export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize

  1. 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

  1. 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 verirgcloud 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}`
    
  2. Bu bağlantıyı ziyaret ederek yeni oluşturulan Cloud Build tetikleyicisini Console'da inceleyin.
  3. 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

  1. GitHub'da webhook'u yapılandırma

$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL

  1. 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

  1. Doğru dizinde olduğunuzdan emin olun

cd $BASE_DIR

  1. 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

  1. Aşağıdaki komutu yürüterek GitHub deposu URL'sini alın

echo ${GIT_BASE_URL}/demo-app

  1. Yeni uygulamayı incelemek için URL'yi web tarayıcınızla açın
  2. Ş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

  1. 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ı

  1. Bu bağlantıyı ziyaret ederek Console'da Cloud Build tetikleyicisini inceleyin.
  2. Derleme geçmişini bu sayfada inceleyin.