öğretici: jenkins kullanarak GitHub Azure kubernetes hizmetine dağıtma

Önemli

Birçok Azure hizmetine Jenkins eklentileri vardır. Bu eklentilerin bazıları 29 Şubat 2024 itibariyle destek dışı olacaktır. Azure CLı, Jenkins 'i Azure hizmetleriyle tümleştirmeye yönelik Şu anda önerilen yoldur. Daha fazla bilgi için Azure Için Jenkins eklentilerimakalesine bakın.

bu öğretici, jenkins 'te sürekli tümleştirme (cı) ve sürekli dağıtım (CD) ayarlayarak GitHub Azure kubernetes Service (aks) kümesine örnek bir uygulama dağıtır.

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

  • Bir AKS kümesine örnek bir Azure oy uygulaması dağıtın.
  • Temel bir Jenkins projesi oluşturun.
  • Jenkins için kimlik bilgilerini, ACR ile etkileşime geçmek üzere ayarlayın.
  • otomatik derlemeler için jenkins derleme işi oluşturun ve web kancasını GitHub.
  • GitHub kod yürütmelerine göre aks 'teki bir uygulamayı güncelleştirmek için cı/CD ardışık düzenini Test edin.

Önkoşullar

Bu öğreticiyi tamamlayabilmeniz için şu öğeler gereklidir:

Uygulamanızı hazırlama

Bu makalede, bir Web arabirimi ve geçici veri depolama için Reddir içeren örnek bir Azure oyu uygulaması kullanırsınız.

Otomatik dağıtımlar için Jenkins ve AKS 'i tümleştirmenizden önce, Azure oy uygulamasını el ile kendi AKS kümenize hazırlayın ve dağıtın. Bu el ile dağıtım, uygulamayı eylemde görmenizi sağlar.

Not

Örnek Azure oy uygulaması, Linux düğümünde çalışmak üzere zamanlanmış bir Linux Pod kullanır. bu makalede özetlenen akış, Windows sunucu düğümünde zamanlanan Windows Server pod için de geçerlidir.

örnek uygulama için aşağıdaki GitHub depoyu çatalla https://github.com/Azure-Samples/azure-voting-app-redis . Depo için GitHub hesabınızda çatal oluşturmak üzere sağ üst köşedeki Fork (Çatal Oluştur) düğmesini seçin.

Çatalınızı geliştirme sisteminize kopyalayın. Bu depoyu kopyalarken çatalınızın URL 'sini kullandığınızdan emin olun:

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

Klonlanan ç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 Docker-Compose. YAML dosyasını ile birlikte kullanın :

docker-compose up -d

Gerekli temel görüntüler çekilir ve uygulama kapsayıcıları oluşturulur. Ardından, oluşturulan görüntüyü görmek için Docker görüntüleri komutunu kullanabilirsiniz. Üç görüntü indirilir veya oluşturulur. azure-vote-front görüntüsü uygulamayı içerir ve temel olarak nginx-flask görüntüsünü kullanır. redisGörüntü, redsıs ö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 Container Registry 'de oturum açın.

az acr login -n <acrLoginServer>

<acrLoginServer>ACR oturum açma sunucusu ile değiştirin.

Resmi, ACR oturum açma sunucusu adı ve sürüm numarasıyla etiketlemek için Docker Tag komutunu kullanın . <acrLoginServer>Önceki adımda elde edilen adınızı kullanın:

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

Son olarak, Azure-oyön görüntüsünü ACR Kayıt defterinize gönderin. Yeniden, yerine <acrLoginServer> kendi ACR kayıt defterinizin oturum açma sunucusu adıyla değiştirin; örneğin myacrregistry.azurecr.io :

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

Örnek uygulamayı AKS 'e dağıtma

Örnek uygulamayı AKS kümenize dağıtmak için, Azure oy deposu deposunun kökündeki Kubernetes bildirim dosyasını kullanabilirsiniz. azure-vote-all-in-one-redis.yamlBildirim dosyasını gibi bir düzenleyiciyle açın vi . microsoft yerine 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, uygulamayı AKS kümenize dağıtmak için kubectl Apply komutunu kullanın:

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

Bir Kubernetes Yük Dengeleyici Hizmeti, uygulamayı internet 'te kullanıma sunmak için oluşturulur. Bu işlem birkaç dakika sürebilir. Yük dengeleyici dağıtımının ilerlemesini izlemek için, kubectl Get Service komutunu bağımsız değişkeniyle birlikte kullanın. EXTERNAL-IP adresi pending durumundan IP address değerine değiştiğinde kubectl izleme işlemini durdurmak için komutunu kullanın.

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

NAME               TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.215.27   <pending>     80:30747/TCP   22s
azure-vote-front   LoadBalancer   10.0.215.27   40.117.57.239   80:30747/TCP   2m

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

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

Jenkins denetleyicisini yapılandırma

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

Gelen bağlantı noktasını açın 80 .

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@<PublicIPAddres>

<PublicIPAddress>Jenkins DENETLEYICISININ IP adresiyle değiştirin.

&Günlüğü Azclı 'ye yükler

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

Not

Azclı 'yi el ile yüklemek için bu yönergeleriizleyin.

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 ve Bağlan aks 'e kurma

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

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

  • Jenkins portalının sol tarafında, Jenkins 'i Yönetsistem yapılandırma ' yı seçin.

  • Genel Özellikleraltında ortam değişkenleri' ni seçin. ACR_LOGINSERVERACR oturum açma sunucunuzun adı ve değeri ile 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 bilgileri oluşturma

CI/CD işlemi sırasında Jenkins, uygulama güncelleştirmelerine göre yeni kapsayıcı görüntüleri oluşturur ve bu görüntüleri daha sonra ACR kayıt defterine itmesi gerekir.

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

Rol ve izinlerin ayrılması için, Jenkins için ACR Kayıt defterinize katkıda bulunan izinlerle bir hizmet sorumlusu yapılandırın.

ACR 'yi kullanmak için Jenkins için bir 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
{
  "appId": "626dd8ea-042d-4043-a8df-4ef56273670f",
  "displayName": "azure-cli-2018-09-28-22-19-34",
  "name": "http://azure-cli-2018-09-28-22-19-34",
  "password": "1ceb4df3-c567-4fb6-955e-f95ac9460297",
  "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
}

appId ve password değerlerini 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 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.

Hizmet sorumlusu katkıda bulunan haklarını ACR kayıt defterine atamak için bir rol ataması oluşturun.

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

<appId>Hizmet sorumlusu oluşturmak için, kullanılan bir komutun çıktısında belirtilen değerle değiştirin.

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

Azure 'da rol atama ile, artık ACR kimlik bilgilerinizi bir Jenkins kimlik bilgileri nesnesinde depolayın. Bu kimlik bilgilerine Jenkins derleme işi sırasında başvurur.

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

Kimlik bilgisi tür olarak Parola ile 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 sorumlusu appId değeri.
  • Parola - ACR kayıt defteriniz ile kimlik doğrulaması için oluşturulan hizmet sorumlusu parolası.
  • Kimlik - acr-credentials gibi kimlik bilgisi tanımlayıcısı

Tamamlandığında, kimlik bilgileri formu aşağıdaki örnekteki gibi olur:

Hizmet sorumlusu bilgileriyle bir Jenkins kimlik bilgisi nesnesi oluşturma

Tamam'ı seçin ve Jenkins portalına geri dönebilirsiniz.

Jenkins projesi oluşturma

Jenkins portalının giriş sayfasında, sol tarafta Yeni öğe'yi seçin:

  1. İş adı olarak azure-vote girin. Serbest stil projesini ve ardındanTamam'ı seçin

  2. Genel bölümünde Projenizi GitHub seçin ve çatalı ekli depo URL'nizi (örneğin, your-github-account /azure-voting-app-redis) girin

  3. Kaynak kodu yönetimi bölümündeGit'iseçin, çatalı yapılan depo URL'nizi (örneğin, your-github-account /azure-voting-app-redis.git) girin

  4. Derleme Tetikleyicileri bölümündeGITscm yoklama GitHub kanca tetikleyicisi'ne tıklayın

  5. Derleme Ortamı altındaGizli metinleri veya dosyaları kullan'ı seçin.

  6. Bağlamalar'ınaltında Kullanıcı adı veparola ekle (ayrılmış) öğesini seçin

    • Kullanıcı ACR_ID Adı Değişkeni için ACR_IDParola Değişkeni ACR_PASSWORD için ACR_PASSWORD

      Jenkins bağlamaları

  7. Kabuk yürüt 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ü derlemek ve ACR kayıt defterinize iter.

    # 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. Kabuğu yürüt türünde başka bir Derleme Adımı ekleyin ve aşağıdaki metni kullanın. Bu betik, AKS'de uygulama dağıtımını ACR'den yeni kapsayıcı görüntüsüyle 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 derlemeyi test etmek

İş işlemelerini temel alarak işi GitHub jenkins derlemeyi el ile test edin.

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

Projenin sol menüsünde Şimdi Derleme'yi seçin.

Jenkins test derlemesi

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

Derlemeler aşağıdaki görevleri yapar:

  1. GitHub kopyalar
  2. Yeni bir kapsayıcı görüntüsü derleme
  3. Kapsayıcı görüntüsünü ACR kayıt defterine iletir
  4. AKS dağıtımı tarafından kullanılan görüntüyü güncelleştirme

Uygulama kodunda hiçbir değişiklik değiştirilmediği için web kullanıcı arabirimi değiştirilmez.

Derleme işi tamamlandıktan sonra derleme geçmişi altında derleme #1'i seçin. Konsol Çıktısı'nu seçin ve derleme işleminin çıktısını görüntüleniyor. Son satır başarılı bir derlemeyi gösteriyor olabilir.

Web kancası GitHub oluşturma

Başarılı bir el ile derleme tamamlandıktan sonra, GitHub Jenkins derlemesi ile tümleştirin. Kod her işlendi mi Jenkins derleme işini çalıştırmak için bir web kancası GitHub.

Web kancası GitHub için aşağıdaki adımları tamamlayın:

  1. Web tarayıcısında GitHub depoya gidin.

  2. İlk Ayarlar'yive ardından sol taraftan Web Kancaları'ı seçin.

  3. Web kancası ekle'yi seçin. Yük URL'si için girin, burada Jenkins <publicIp> sunucusunun IP adresidir. sonda olduğundan emin / olun. İçerik türü ve anında yayın olaylarını tetiklemek 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

Tam CI/CD işlem hattını test edin

Artık CI/CD işlem hattının tamamını test edin. Bir kod işlemeyi GitHub aşağıdaki adımlar oluşur:

  1. Web GitHub Jenkins'e bilgi vetir.
  2. Jenkins derleme işini başlatır ve en son kod işlemeyi GitHub.
  3. Güncelleştirilmiş kod kullanılarak bir Docker derlemesi başlatıldı ve yeni kapsayıcı görüntüsü en son derleme numarasıyla etiketlendi.
  4. Bu yeni kapsayıcı görüntüsü, Azure Container Registry.
  5. Üzerinde çalışan uygulamanız Azure Kubernetes Service en son görüntüyle birlikte Azure Container Registry.

Geliştirme makinenize kopyalanan uygulamayı bir kod düzenleyicisiyle açın. /azure-vote/azure-vote dizinindeconfig_file.cfg adlı dosyayı açın. Aşağıdaki örnekte gösterildiği gibi, bu dosyada 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üncelleştirildiğinde dosyayı kaydedin, değişiklikleri işin ve deponun sizin GitHub itin. Web GitHub, 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şturmak ve itmek ve güncelleştirilmiş uygulamayı AKS'ye dağıtmak birkaç saniye sürer.

Derleme tamamlandıktan sonra, örnek Azure oy 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 oyları

Sonraki adımlar