Uygulamaya İlk Katılım

1. Başlamadan önce

Yönlendirmesiz ortam kurulumu

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

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

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

https://ide.cloud.google.com

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

  1. API'leri etkinleştir

gcloud services enable \

cloudbuild.googleapis.com \

secretmanager.googleapis.com

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

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

  1. Şablonu çalışma dizinine kopyalayın.

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şturun

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

  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/mcd-app-templates

git push origin main

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

  1. Şablonu çalışma dizinine kopyalayın.

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şturun

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

  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/mcd-shared_kustomize

git push origin main

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

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

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

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

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

  1. Gizli anahtarı oluşturma

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

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

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

  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 defterini tanımlayan bir değişken ayarlanmıştır. Aşağıdaki komutla değeri inceleyin.

echo $IMAGE_REPO

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

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

  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, GitHub'daki yeni depoyu inceleyebilirsiniz.

  1. Aşağıdaki komutu çalıştırarak GitHub depo URL'sini alın.

echo ${GIT_BASE_URL}/demo-app

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

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

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