Öğretici: Jenkins kullanarak GitHub'dan Azure Kubernetes Service'e dağıtma
Önemli
Birçok Azure hizmeti Jenkins eklentilerine sahiptir. Bu eklentilerden bazıları 29 Şubat 2024 itibarıyla destekten çıkarılacaktır. Azure CLI, Jenkins'i Azure hizmetleriyle tümleştirmenin şu anda önerilen yoludur. Daha fazla bilgi için Azure iç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:
Kubernetes, Git, CI/CD ve kapsayıcı görüntüleri hakkında temel bilgiler
AKS kümesi ve
kubectl
AKS kümesi kimlik bilgileriyle yapılandırılmış.Azure Container Registry (ACR) kayıt defteri, ACR oturum açma sunucusu adı ve ACR kayıt defteriyle kimlik doğrulaması için yapılandırılmış AKS kümesi.
Azure CLI sürüm 2.0.46 veya üzeri yüklü ve yapılandırılmış. Sürümü bulmak için
az --version
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.Geliştirme sisteminizde yüklü bir GitHub hesabı , GitHub kişisel erişim belirteci ve Git istemcisi
Jenkins'i dağıtmak için bu örnek betikli yöntem yerine kendi Jenkins örneğinizi sağlarsanız Jenkins örneğinizde Docker yüklü, yapılandırılmış ve kubectl gerekir.
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, uygulamayı uygulamada görmenizi sağlar.
Not
Ö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 zamanlanmış bir Windows Server podunda da çalışır.
Örnek uygulama için aşağıdaki GitHub deposunu oluşturun - 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ı geliştirme sisteminize kopyalama. Bu depoyu klonlarken çatalınızın 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
docker-compose.yaml 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. Üç 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. Görüntü redis
, 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>
değerini ACR oturum açma sunucunuzla değiştirin <acrLoginServer>
.
Görüntüyü ACR oturum açma sunucusu adı ve sürüm numarası v1
ile etiketlemek için docker tag 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. Değerini yeniden kendi ACR kayıt defterinizin oturum açma sunucusu adıyla değiştirin <acrLoginServer>
; ö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 vi
bir düzenleyiciyle açın. 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 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 bağımsız değişkeniyle birlikte --watch
kullanın.
$ kubectl get service azure-vote-front --watch
EXTERNAL-IP adresi pending durumundan IP address değerine değiştiğinde kubectl izleme işlemini durdurmak için Control + C
komutunu kullanın.
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:
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 bağlantı noktasını 80
açın.
az vm open-port \
--resource-group <Resource_Group_name> \
--name <Jenkins_Controller_VM> \
--port 80 --priority 1020
ve <Jenkins_Controller_VM>
değerlerini uygun değerlerle değiştirin<Resource_Group_name>
.
Jenkins Denetleyicisine SSH
ssh azureuser@<PublicIPAddress>
değerini Jenkins Denetleyicisi'nin IP adresiyle değiştirin <PublicIPAddress>
.
AzCLI'yi Yükleme ve Oturum Açma
curl -L https://aka.ms/InstallAzureCli | bash
az login
Not
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>
ve <AKS_Name>
değerlerini uygun değerlerle değiştirin<Resource_Group>
.
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>Yapılandırma Sistemini Yönet'i seç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.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 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 bunu değişken olarak depolayın.
ACR_ID=$(az acr show --resource-group <Resource_Group> --name <acrLoginServer> --query "id" --output tsv)
ve <acrLoginServer>
değerlerini uygun değerlerle değiştirin<Resource_Group>
.
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
değerini, hizmet sorumlusunu oluşturmak için kullanılan sapkın komutun çıkışında sağlanan değerle değiştirin <appId>
.
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 Jenkins Kimlik Bilgilerini>Yönet Jenkins>Deposu>Genel kimlik bilgilerini (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 bilgisi tanımlayıcısı
Tamamlandığında, kimlik bilgileri formu aşağıdaki örneğe benzer:
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:
azure-vote'i iş adı olarak girin. Serbest stil proje'yi ve ardından Tamam'ı seçin
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
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.gitDerleme Tetikleyicileri bölümünde GITscm yoklaması için GitHub kanca tetikleyicisi'ni seçin
Derleme Ortamı'nın altında Gizli dizi metinleri veya dosyaları kullan'ı seçin
Bağlamalar'ın altında Kullanıcı adı ve parola ekle 'yi>seçin (ayrılmış)
Kullanıcı Adı Değişkeni ve
ACR_PASSWORD
Parola Değişkeni için girinACR_ID
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
Execute shell türünde başka bir Derleme Adımı ekleyin ve aşağıdaki metni kullanın. Bu betik AKS'deki uygulama dağıtımını ACR'deki yeni kapsayıcı görüntüsüyle güncelleştirir.
# 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
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.
Docker görüntü katmanları Jenkins sunucusuna çekilirken ilk derleme daha uzun sürer.
Derlemeler aşağıdaki görevleri yerine getirin:
- GitHub deposunu klonlar
- Yeni bir kapsayıcı görüntüsü oluşturur
- Kapsayıcı görüntüsünü ACR kayıt defterine gönderir
- 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 işlendiğ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:
Web tarayıcısında çatallanmış GitHub deponuza göz atın.
Ayarlar'ı ve ardından sol taraftaki Web kancaları'nı seçin.
Web kancası ekle'yi seçin. Yük URL'si için girin
http://<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.Web kancası ekle'yi seçin.
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:
- GitHub web kancası Jenkins'e bildirimde bulunur.
- Jenkins derleme işini başlatır ve GitHub'dan en son kod işlemesini çeker.
- 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.
- Bu yeni kapsayıcı görüntüsü Azure Container Registry'ye gönderilir.
- 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 dizininin 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üncelleştirdiğinizde dosyayı kaydedin, değişiklikleri işleyin ve GitHub deposu çatalınıza gönderin. 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: