Öğretici: Jenkins ve Azure CLI ile Azure Uygulaması Hizmetine 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.
Azure'a java web uygulaması dağıtmak için Jenkins İşlem Hattı'nda Azure CLI kullanabilirsiniz. Bu öğreticide aşağıdaki görevleri yerine getirin:
- Jenkins sanal makinesi oluşturma
- Jenkins’i yapılandırma
- Azure'da web uygulaması oluşturma
- GitHub deposu hazırlama
- Jenkins işlem hattı oluşturma
- İşlem hattını çalıştırma ve web uygulamasını doğrulama
Önkoşullar
- Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Jenkins - , Linux VM'ye Jenkins Yükleme
- Azure CLI: Jenkins sunucusuna Azure CLI (sürüm 2.0.67 veya üzeri) yükleyin.
Jenkins’i yapılandırma
Aşağıdaki adımlarda, Jenkins denetleyicisine gerekli Java JDK ve Maven'ın nasıl yükleneceği gösterilmektedir:
SSH kullanarak Jenkins denetleyicisinde oturum açın.
Azure için OpenJDK'nin Azul Zulu derlemesini bir apt-get deposundan indirin ve yükleyin:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9 sudo apt-add-repository "deb http://repos.azul.com/azure-only/zulu/apt stable main" sudo apt-get -q update sudo apt-get -y install zulu-8-azure-jdk
Maven'ı yüklemek için aşağıdaki komutu çalıştırın:
sudo apt-get install -y maven
Jenkins kimlik bilgilerine Azure hizmet sorumlusu ekleme
Aşağıdaki adımlarda Azure kimlik bilgilerinizin nasıl belirtileceğini gösterilmektedir:
Jenkins panosunda Kimlik Bilgileri - Sistem ->> öğesini seçin.
Genel kimlik bilgileri(kısıtlamasız) seçeneğini belirleyin.
Microsoft Azure hizmet sorumlusu eklemek için 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ı: Hizmet sorumlusu
appId
- Parola: Hizmet sorumlusu
password
- Kimlik: Kimlik bilgisi tanımlayıcısı (örneğin
AzureServicePrincipal
)
- Kullanıcı adı: Hizmet sorumlusu
Java web uygulamasını dağıtmak için Azure App Service oluşturma
ÜCRETSİz fiyatlandırma katmanıyla bir Azure Uygulaması Hizmet planı oluşturmak için az appservice plan create komutunu kullanın:
az appservice plan create \
--name <app_service_plan> \
--resource-group <resource_group> \
--sku FREE
Önemli noktalar:
- Uygulama hizmeti planı, uygulamalarınızı barındırmak için kullanılan fiziksel kaynakları tanımlar.
- Bir appservice planına atanan tüm uygulamalar bu kaynakları paylaşır.
- Appservice planları, birden çok uygulama barındırırken maliyet tasarrufu yapmanızı sağlar.
Azure web uygulaması oluşturma
App Service planında myAppServicePlan
bir web uygulaması tanımı oluşturmak için az webapp create komutunu kullanın.
az webapp create \
--name <app_name> \
--resource-group <resource_group> \
--plan <app_service_plan>
Önemli noktalar:
- Web uygulaması tanımı, uygulamanıza erişebilmek için bir URL sağlar ve çeşitli seçenekleri yapılandırarak kodunuzu Azure'a dağıtır.
- Yer tutucuyu
<app_name>
benzersiz bir uygulama adıyla değiştirin. - Uygulama adı, web uygulamasının varsayılan etki alanı adının bir parçasıdır. Bu nedenle adın Azure'daki tüm uygulamalarda benzersiz olması gerekir.
- Uygulamanızı kullanıcılarınızın kullanımına sunmadan önce web uygulamasına bir özel etki alanı adı girdisi eşleyebilirsiniz.
Java'yı yapılandırma
Uygulama için Java çalışma zamanı yapılandırmasını ayarlamak için az appservice web config update komutunu kullanın:
az webapp config set \
--name <app_name> \
--resource-group <resource_group> \
--java-version 1.8 \
--java-container Tomcat \
--java-container-version 8.0
GitHub deposu hazırlama
Azure için Basit Java Web Uygulaması deposunu açın.
Depoyu kendi GitHub hesabınıza çatal yapmak için Çatal düğmesini seçin.
Dosya adına tıklayarak Jenkinsfile dosyasını açın.
Dosyayı düzenlemek için kalem simgesini seçin.
Abonelik kimliğini ve kiracı kimliğini güncelleştirin.
withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>', 'AZURE_TENANT_ID=<tenant_id>'])
Sırasıyla 22. ve 23. satırdaki web uygulamanızın kaynak grubunu ve adını güncelleştirin.
def resourceGroup = '<resource_group>' def webAppName = '<app_name>'
Jenkins örneğinizdeki kimlik bilgisi kimliğini güncelleştirme
withCredentials([usernamePassword(credentialsId: '<service_princial>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
Jenkins işlem hattı oluşturma
Jenkins işlem hattı oluşturmak için aşağıdakileri yapın:
Jenkins'i bir web tarayıcısında açın.
Yeni Öğe’yi seçin.
İş için bir ad girin.
İşlem Hattı'nı seçin.
Tamam seçeneğini işaretleyin.
İşlem Hattı'nı seçin.
Definition (Tanım) için Pipeline script from SCM'yi (SCM'den işlem hattı betiği) seçin.
SCM için Git'i seçin.
Çatallanmış deponuzun GitHub URL'sini girin:
https:\<forked_repo\>.git
Kaydet'i seçin.
İşlem hattınızı test etme
Oluşturduğunuz işlem hattına gidin
Şimdi Derle'yi seçin
Derleme tamamlandıktan sonra, derleme ayrıntılarını görmek için Konsol Çıkışı'nı seçin.
Web uygulamanızı doğrulama
WAR dosyasının web uygulamanıza başarıyla dağıtıldığından emin olmak için aşağıdakileri yapın:
Aşağıdaki URL'ye göz atın:
http://<app_name>.azurewebsites.net/api/calculator/ping
Aşağıdakine benzer bir metin görmeniz gerekir:
Welcome to Java Web App!!! This is updated! Today's date
Şu URL'ye göz atın (x ve <y değerlerini toplanacak iki değerle değiştir><): http://< app_name.azurewebsites.net/api/calculator/add?x>=<x>&y=<y>>.
Linux'ta Azure Uygulaması Hizmeti'ne dağıtma
App Service, desteklenen uygulama yığınları için web uygulamalarını Linux'ta yerel olarak da barındırabilir. Ayrıca özel Linux kapsayıcıları da çalıştırabilir (Kapsayıcılar için Web App olarak da bilinir.)
Linux'ta bir Azure Uygulaması Hizmetine dağıtmak için betiği değiştirebilirsiniz. Linux üzerinde App Service Docker'i destekler. Bu nedenle, web uygulamanızı hizmet çalışma zamanıyla docker görüntüsüne paketleyen bir Dockerfile sağlarsınız. Eklenti görüntüyü oluşturur, docker kayıt defterine gönderir ve görüntüyü web uygulamanıza dağıtır.
Linux ve Azure Container Registry üzerinde Azure Uygulaması Hizmeti oluşturmak için özel bir kapsayıcı kullanarak özel yazılımı Azure Uygulaması Hizmetine geçirme bölümüne bakın.
az group create --name myResourceGroup2 --location westus2 az acr create --name myACRName --resource-group myResourceGroup2 --sku Basic --admin-enabled true az appservice plan create --name myAppServicePlan --resource-group myResourceGroup2 --is-linux az webapp create --resource-group myResourceGroup2 --plan myAppServicePlan --name myApp --deployment-container-image-name myACRName.azurecr.io/calculator:latest
Jenkins'inize Docker yükleyin.
Docker pipeline eklentisinin yüklü olduğundan emin olun.
Çatalını oluşturduğunuz Azure için Basit Java Web App deposunda Jenkinsfile2 dosyasını aşağıdaki gibi düzenleyin:
Abonelik kimliğini ve kiracı kimliğini güncelleştirin.
withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>', 'AZURE_TENANT_ID=<myTenantId>']) {
Kaynak grubunuzun, web uygulamanızın ve ACR'nizin adlarına güncelleştirin (yer tutucuları değerlerinizle değiştirin).
def webAppResourceGroup = '<resource_group>' def webAppName = '<app_name>' def acrName = '<registry>'
Kimlik bilgilerinize güncelleştirin
<azsrvprincipal\>
withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
kullanarak
Jenkinsfile2
Windows'ta Azure web uygulamasına dağıtırken yaptığınız gibi yeni bir Jenkins işlem hattı oluşturun.Yeni işinizi çalıştırın.
Doğrulamak için Azure CLI'da aşağıdaki komutu çalıştırın:
az acr repository list -n <myRegistry> -o json
Aşağıdakine benzer sonuçlar görmeniz gerekir:
[ "calculator" ]
konumuna
http://<app_name>.azurewebsites.net/api/calculator/ping
gidin (yer tutucuyu değiştirin). Aşağıdakine benzer sonuçlar görmeniz gerekir:Welcome to Java Web App!!! This is updated! Today's date
konumuna
http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y>
gidin (yer tutucuları değiştirin). ve içinx
y
belirttiğiniz değerler toplanıp görüntülenir.