Öğretici: Jenkins kullanarak GitHub'dan Azure Kubernetes Service'e dağıtma

Önemli

Birçok Azure hizmeti Jenkins eklentilerine sahip olsa da, bu eklentilerin çoğu 29 Şubat 2024 itibarıyla destek sona erdi. Azure CLI, Jenkins'i Azure hizmetleriyle tümleştirmenin şu anda önerilen yoludur. Daha fazla bilgi için Azureiçin Jenkins eklentileri makalesine bakın.

Bu öğretici, Jenkins'te sürekli tümleştirme (CI) ve sürekli dağıtım (CD) ayarlayarak GitHub'dan Azure Kubernetes Service (AKS ) kümesine örnek bir uygulama dağıtır.

Bu öğreticide şu görevleri tamamlayacaksınız:

  • Aks kümesine örnek bir Azure vote uygulaması dağıtın.
  • Temel bir Jenkins projesi oluşturun.
  • Jenkins'in ACR ile etkileşim kuracak kimlik bilgilerini ayarlayın.
  • Otomatik derlemeler için bir Jenkins derleme işi ve GitHub web kancası oluşturun.
  • GITHub kod işlemelerini temel alarak AKS'de bir uygulamayı güncelleştirmek için CI/CD işlem hattını test edin.

Önkoşullar

Bu öğreticiyi tamamlamak için şu öğelere ihtiyacınız vardır:

Uygulamanızı hazırlama

Bu makalede, geçici veri depolama için bir web arabirimi ve Redis içeren örnek bir Azure vote uygulaması kullanacaksınız.

Jenkins ve AKS'yi otomatik dağıtımlar için tümleştirmeden önce Azure vote uygulamasını el ile hazırlayın ve AKS kümenize dağıtın. Bu el ile dağıtım, uygulamanın çalışmasını görmenizi sağlar.

Uyarı

Örnek Azure vote uygulaması, Linux düğümünde çalışacak şekilde zamanlanmış bir Linux podunu kullanır. Bu makalede özetlenen akış, Windows Server düğümünde planlanan bir Windows Server podu için de geçerlidir.

Örnek uygulama için aşağıdaki GitHub deposunu oluşturun - https://github.com/Azure-Samples/azure-voting-app-redis. Depoyu kendi GitHub hesabınıza forklamak için sağ üst köşedeki Fork düğmesini seçin.

Geliştirme sisteminize fork'unu kopyalayın. Bu depoyu klonlarken forkunuzun URL'sini kullandığınızdan emin olun:

git clone https://github.com/<your-github-account>/azure-voting-app-redis.git

Kopyalanan çatalınızın dizinine geçin:

cd azure-voting-app-redis

Örnek uygulama için gereken kapsayıcı görüntülerini oluşturmak için ile docker-compose dosyasını kullanın:

docker-compose up -d

Gerekli temel görüntüler çekilir ve uygulama kapsayıcıları oluşturulur. Ardından docker images komutunu kullanarak oluşturulan görüntüyü görebilirsiniz. Üç resim indirildi veya oluşturuldu. azure-vote-front görüntüsü uygulamayı içerir ve nginx-flask görüntüsünü temel olarak kullanır. redis görüntüsü, Redis örneğini başlatmak için kullanılır.

$ docker images

REPOSITORY                   TAG        IMAGE ID            CREATED             SIZE
azure-vote-front             latest     9cc914e25834        40 seconds ago      694MB
redis                        latest     a1b99da73d05        7 days ago          106MB
tiangolo/uwsgi-nginx-flask   flask      788ca94b2313        9 months ago        694MB

Azure kapsayıcı kayıt defterinizde oturum açın.

az acr login -n <acrLoginServer>

<acrLoginServer> değerini ACR oturum açma sunucunuzla değiştirin.

Görüntüyü ACR oturum açma sunucusu adı ve sürüm numarası ile etiketlemek için v1 komutunu kullanın. Önceki adımda elde edilen kendi <acrLoginServer> adınızı kullanın:

docker tag azure-vote-front <acrLoginServer>/azure-vote-front:v1

Son olarak azure-vote-front görüntüsünü ACR kayıt defterinize gönderin. Yeniden, <acrLoginServer> öğesini kendi ACR kayıt defterinizin giriş sunucusu adıyla değiştirin, örneğin myacrregistry.azurecr.io:

docker push <acrLoginServer>/azure-vote-front:v1

Örnek uygulamayı AKS'ye dağıtma

Örnek uygulamayı AKS kümenize dağıtmak için Azure vote deposu deposunun kökündeki Kubernetes bildirim dosyasını kullanabilirsiniz. azure-vote-all-in-one-redis.yaml Bildirim dosyasını gibi vibir düzenleyiciyle açın. "Yerine microsoft ACR oturum açma sunucunuzun adını yazın." Bu değer bildirim dosyasının 60 . satırında bulunur:

containers:
- name: azure-vote-front
  image: azuredocs/azure-vote-front

Ardından kubectl apply komutunu kullanarak uygulamayı AKS kümenize dağıtın:

kubectl apply -f azure-vote-all-in-one-redis.yaml

Uygulamayı İnternet'te kullanıma açmak için bir Kubernetes yük dengeleyici hizmeti oluşturulur. Bu işlem birkaç dakika sürebilir. Yük dengeleyici dağıtımının ilerleme durumunu izlemek için kubectl get service komutunu --watch argümanıyla kullanın.

$ kubectl get service azure-vote-front --watch

EXTERNAL-IP adresi bekliyor durumundan bir IP adresine dönüştüğünde, kubectl izleme sürecini durdurmak için Control + C kullanarak durdurun.

NAME               TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE

Uygulamayı uygulamada görmek için, hizmetinizin dış IP adresine bir web tarayıcısı açın. Aşağıdaki örnekte gösterildiği gibi Azure vote uygulaması görüntülenir:

AKS'de çalışan Azure örnek oy uygulaması

Jenkins Denetleyicisini Yapılandırma

Jenkins Denetleyicisi'nden AKS dağıtımlarını etkinleştirmek için aşağıdaki değişiklikleri uygulayın:

Gelen portu 80 açın.

az vm open-port \
--resource-group <Resource_Group_name> \
--name <Jenkins_Controller_VM>  \
--port 80 --priority 1020

<Resource_Group_name> ve <Jenkins_Controller_VM> değerlerini uygun değerlerle değiştirin.

Jenkins Denetleyicisine SSH

ssh azureuser@<PublicIPAddress>

<PublicIPAddress> değerini Jenkins Denetleyicisi'nin IP adresiyle değiştirin.

AzCLI'yi Yükleme ve Oturum Açma

curl -L https://aka.ms/InstallAzureCli | bash
az login

Uyarı

AzCLI'yi el ile yüklemek için bu yönergeleri izleyin.

Docker'ı yükleme

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y;
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -;
sudo apt-key fingerprint 0EBFCD88;
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable";
sudo apt-get update;
sudo apt-get install docker-ce -y;

Kubectl'ı yükleme ve AKS'ye bağlanma

sudo az aks install-cli
sudo az aks get-credentials --resource-group <Resource_Group> --name <AKS_Name>

<Resource_Group> ve <AKS_Name> değerlerini uygun değerlerle değiştirin.

Erişimi yapılandırma

sudo usermod -aG docker jenkins;
sudo usermod -aG docker azureuser;
sudo touch /var/lib/jenkins/jenkins.install.InstallUtil.lastExecVersion;
sudo service jenkins restart;
sudo cp ~/.kube/config /var/lib/jenkins/.kube/
sudo chmod 777 /var/lib/jenkins/
sudo chmod 777 /var/lib/jenkins/config

Jenkins ortam değişkeni oluşturma

Jenkins ortam değişkeni, ACR oturum açma sunucusu adını tutmak için kullanılır. Jenkins derleme işi sırasında bu değişkene başvurulur. Bu ortam değişkenini oluşturmak için aşağıdaki adımları tamamlayın:

  • Jenkins portalının sol tarafında Jenkins >Yönet'iseçin

  • Genel Özellikler'in altında Ortam değişkenleri'ni seçin. ACR oturum açma sunucunuzun adını ACR_LOGINSERVER ve değerini içeren bir değişken ekleyin.

    Jenkins ortam değişkenleri

  • Tamamlandığında, sayfanın alt kısmındaki Kaydet'i seçin.

ACR için Jenkins kimlik bilgisi oluşturma

CI/CD işlemi sırasında Jenkins, uygulama güncelleştirmelerini temel alan yeni kapsayıcı görüntüleri oluşturur ve ardından bu görüntüleri ACR kayıt defterine göndermesi gerekir.

Jenkins'in güncelleştirilmiş kapsayıcı görüntülerini ACR'ye göndermesine izin vermek için ACR kimlik bilgilerini belirtmeniz gerekir.

Rollerin ve izinlerin ayrılması için Jenkins için ACR kayıt defterinizde Katkıda Bulunan izinlerine sahip bir hizmet sorumlusu yapılandırın.

Jenkins'in ACR kullanması için hizmet sorumlusu oluşturma

İlk olarak az ad sp create-for-rbac komutunu kullanarak bir hizmet sorumlusu oluşturun:

az ad sp create-for-rbac

Bu komut aşağıdaki örneğe benzer bir çıktı oluşturur:

{
  "appId": "<app-ID>",
  "displayName": "azure-cli-2018-09-28-22-19-34",
  "name": "http://azure-cli-2018-09-28-22-19-34",
  "password": "<password>",
  "tenant": "<tenant-ID>"
}

appId ve parolayı not edin. Bu değerler Jenkins'te kimlik bilgisi kaynağını yapılandırmak için aşağıdaki adımlarda kullanılır.

az acr show komutunu kullanarak ACR kayıt defterinizin kaynak kimliğini alın ve bunu değişken olarak depolayın.

ACR_ID=$(az acr show --resource-group <Resource_Group> --name <acrLoginServer> --query "id" --output tsv)

<Resource_Group> ve <acrLoginServer> değerlerini uygun değerlerle değiştirin.

ACR kayıt defterine, hizmet sorumlusuna Katkıda Bulunan haklarını atamak için bir rol ataması oluşturun.

az role assignment create --assignee <appID> --role Contributor --scope $ACR_ID

<appId>'yi, hizmet sorumlusunu oluşturmak için kullanılan önceki komutun çıktısında sağlanan değerle değiştirin.

Jenkins'te ACR hizmet sorumlusu için kimlik bilgisi kaynağı oluşturma

Azure'da oluşturulan rol atamasıyla, şimdi ACR kimlik bilgilerinizi bir Jenkins kimlik bilgisi nesnesinde depolayın. Bu kimlik bilgilerine Jenkins derleme işi sırasında başvurulur.

Jenkins portalının sol tarafında Yönet Jenkins>Kimlik Bilgilerini Yönet>Jenkins Deposu>Genel kimlik bilgileri (kısıtlamasız)>Kimlik Bilgileri Ekle'yi seçin

Kimlik bilgisi türünün Parolalı Kullanıcı Adı olduğundan emin olun ve aşağıdaki öğeleri girin:

  • Kullanıcı adı - ACR kayıt defterinizle kimlik doğrulaması için oluşturulan hizmet sorumlusunun appId değeri.
  • Parola - ACR kayıt defterinizle kimlik doğrulaması için oluşturulan hizmet sorumlusunun parolası .
  • Kimlik - acr-credentials gibi kimlik tanımlayıcısı

Tamamlandığında, kimlik bilgileri formu aşağıdaki örneğe benzer:

Hizmet sorumlusu bilgileriyle Jenkins kimlik bilgisi nesnesi oluşturma

Tamam'ı seçin ve Jenkins portalına dönün.

Jenkins projesi oluşturma

Jenkins portalınızın giriş sayfasından sol taraftaki Yeni öğe'yi seçin:

  1. azure-vote'i iş adı olarak girin. Serbest stil proje'yi ve ardından Tamam'ı seçin

  2. Genel bölümünün altında GitHub projesi'ni seçin ve çatallanmış depo URL'nizi girin; örneğinhttps://github.com/<, your-github-account>/azure-voting-app-redis

  3. Kaynak kodu yönetimi bölümünde Git'i seçin, çatallanmış depo .git URL'nizi girin; örneğinhttps://github.com/<, your-github-account>/azure-voting-app-redis.git

  4. Derleme Tetikleyicileri bölümünde GITscm yoklaması için GitHub kanca tetikleyicisi'ni seçin

  5. Derleme Ortamı'nın altında Gizli metinler veya dosyaları kullan'ı seçin

  6. Bağlamalar'ın altında >yi seçin (ayrılmış)

    • ACR_ID ve ACR_PASSWORD için girin

      Jenkins bağlamaları

  7. Execute shell türünde bir Derleme Adımı eklemeyi seçin ve aşağıdaki metni kullanın. Bu betik yeni bir kapsayıcı görüntüsü oluşturur ve ACR kayıt defterinize gönderir.

    # Build new image and push to ACR.
    WEB_IMAGE_NAME="${ACR_LOGINSERVER}/azure-vote-front:kube${BUILD_NUMBER}"
    docker build -t $WEB_IMAGE_NAME ./azure-vote
    docker login ${ACR_LOGINSERVER} -u ${ACR_ID} -p ${ACR_PASSWORD}
    docker push $WEB_IMAGE_NAME
    
  8. Execute shell türünde başka bir Derleme Adımı ekleyin ve aşağıdaki metni kullanın. Bu betik, ACR'deki yeni kapsayıcı imajıyla AKS'deki uygulama dağıtımını günceller.

    # Update kubernetes deployment with new image.
    WEB_IMAGE_NAME="${ACR_LOGINSERVER}/azure-vote-front:kube${BUILD_NUMBER}"
    kubectl set image deployment/azure-vote-front azure-vote-front=$WEB_IMAGE_NAME
    
  9. Tamamlandıktan sonra Kaydet'e tıklayın.

Jenkins derlemesini test etme

GitHub işlemelerini temel alarak işi otomatikleştirmeden önce Jenkins derlemesini el ile test edin.

Bu derleme, işin doğru yapılandırıldığını doğrular. Doğru Kubernetes kimlik doğrulama dosyasının yerinde olduğunu ve ACR kimlik doğrulamasının çalıştığını onaylar.

Projenin sol tarafındaki menüde Şimdi Derle'yi seçin.

Jenkins test derlemesi

Docker görüntü katmanları Jenkins sunucusuna çekilirken ilk derleme daha uzun sürer.

Yapılar aşağıdaki görevleri yerine getirir:

  1. GitHub deposunu klonlar
  2. Yeni bir kapsayıcı imajı oluşturur
  3. Kapsayıcı görüntüsünü ACR kayıt defterine gönderir
  4. AKS dağıtımı tarafından kullanılan görüntüyü güncelleştirir

Uygulama kodunda hiçbir değişiklik yapılmadığından web kullanıcı arabirimi değiştirilmez.

Derleme işi tamamlandıktan sonra derleme geçmişi'nin altında derleme #1'i seçin. Konsol Çıkışı'nı seçin ve derleme işleminden çıkışı görüntüleyin. Son satır başarılı bir derlemeyi göstermelidir.

GitHub web kancası oluşturma

Başarıyla el ile derleme tamamlandıktan sonra GitHub'ı Jenkins derlemesiyle tümleştirin. Kod GitHub'a her gönderildiğinde Jenkins derleme işini çalıştırmak için bir web kancası kullanın.

GitHub web kancasını oluşturmak için aşağıdaki adımları tamamlayın:

  1. Web tarayıcınızda forkladığınız GitHub reposuna gidin.

  2. Ayarlar'ı ve ardından sol taraftaki Web kancaları'nı seçin.

  3. Web kancası ekle'yi seçin. Yük URL'si için girinhttp://<publicIp:8080>/github-webhook/; burada <publicIp> Jenkins sunucusunun IP adresidir. Sondaki /öğesini eklediğinizden emin olun. İçerik türü ve gönderme olaylarında tetikleme için diğer varsayılan değerleri bırakın.

  4. Web kancası ekle'yi seçin.

    Jenkins için GitHub web kancası oluşturma

Ci/CD işlem hattının tamamını test edin

Artık CI/CD işlem hattının tamamını test edebilirsiniz. GitHub'a bir kod işleme gönderdiğinizde aşağıdaki adımlar gerçekleşir:

  1. GitHub web kancası Jenkins'e bildirimde bulunur.
  2. Jenkins derleme işini başlatır ve GitHub'dan en son kod işlemesini çeker.
  3. Güncelleştirilmiş kod kullanılarak bir Docker derlemesi başlatılır ve yeni kapsayıcı görüntüsü en son derleme numarasıyla etiketlenmiştir.
  4. Bu yeni kapsayıcı görüntüsü Azure Container Registry'ye gönderilir.
  5. Azure Kubernetes Service üzerinde çalışan uygulamanız, Azure Container Registry'den en son görüntüyle güncelleştirilir.

Geliştirme makinenizde kopyalanan uygulamayı bir kod düzenleyicisiyle açın. /azure-vote/azure-vote dizini altında config_file.cfg adlı dosyayı açın. Aşağıdaki örnekte gösterildiği gibi, bu dosyadaki oy değerlerini kedi ve köpek dışında bir değerle güncelleştirin:

# UI Configurations
TITLE = 'Azure Voting App'
VOTE1VALUE = 'Blue'
VOTE2VALUE = 'Purple'
SHOWHOST = 'false'

Güncellediğinizde dosyayı kaydedin, değişiklikleri gönderin ve bunları GitHub deposu fork'unuza yükleyin. GitHub web kancası Jenkins'te yeni bir derleme işi tetikler. Jenkins web panosunda derleme işlemini izleyin. En son kodu çekmek, güncelleştirilmiş görüntüyü oluşturup göndermek ve güncelleştirilmiş uygulamayı AKS'de dağıtmak birkaç saniye sürer.

Derleme tamamlandıktan sonra örnek Azure vote uygulamasının web tarayıcınızı yenileyin. Değişiklikleriniz aşağıdaki örnekte gösterildiği gibi görüntülenir:

Jenkins derleme işi tarafından güncelleştirilen AKS'de örnek Azure oylaması

Sonraki Adımlar