Azure Uygulaması Hizmeti'ne python web uygulaması derlemek ve dağıtmak için Azure Pipelines'ı kullanma
Azure DevOps Services
Sürekli tümleştirme ve sürekli teslim (CI/CD) için Azure Pipelines'ı kullanarak Linux üzerinde Azure Uygulaması Hizmeti'ne bir Python web uygulaması oluşturun ve dağıtın. İşlem hattınız, depoya yönelik bir işleme olduğunda Python web uygulamanızı otomatik olarak derleyip App Service'e dağıtır.
Bu makalede şunları öğreneceksiniz:
- Azure Uygulama Hizmeti'nde bir web uygulaması oluşturun.
- Azure DevOps'ta proje oluşturma.
- DevOps projenizi Azure'a bağlayın.
- Python'a özgü bir işlem hattı oluşturun.
- Uygulamanızı derlemek ve App Service'te web uygulamanıza dağıtmak için işlem hattını çalıştırın.
Önkoşullar
- Azure aboneliği. Aboneliğiniz yoksa ücretsiz bir hesap oluşturun.
- Bir GitHub hesabı. Yoksa ücretsiz bir tane oluşturun.
- Azure DevOps Services kuruluşu. Ücretsiz bir tane oluşturun.
- Azure aboneliği. Aboneliğiniz yoksa ücretsiz bir hesap oluşturun.
- Bir GitHub hesabı. Yoksa ücretsiz bir tane oluşturun.
- Bir Azure DevOps Sunucusu.
- Şirket içinde barındırılan bir aracı. Şirket içinde barındırılan bir aracı oluşturmanız gerekiyorsa bkz . Şirket içinde barındırılan aracılar.
Uygulama kodunuz için depo oluşturma
GitHub hesabınıza konumundaki örnek deponun https://github.com/Microsoft/python-sample-vscode-flask-tutorial çatalını oluşturun.
Yerel ana bilgisayarınızda GitHub deponuzu kopyalayın. öğesini çatallanmış deponuzun URL'si ile değiştirerek <repository-url>
aşağıdaki komutu kullanın.
git clone <repository-url>
Uygulamanızı yerel olarak test edin
Çalıştığından emin olmak için uygulamayı yerel olarak derleyin ve çalıştırın.
Kopyalanan depo klasörüne geçin.
cd python-sample-vscode-flask-tutorial
Uygulamayı derleyin ve çalıştırın
python -m venv .env source .env/bin/activate pip install --upgrade pip pip install -r ./requirements.txt export set FLASK_APP=hello_app.webapp python3 -m flask run
Uygulamayı görüntülemek için bir tarayıcı penceresi açın ve adresine http://localhost:5000gidin. başlığını
Visual Studio Flask Tutorial
gördüğünüzden emin olun.İşiniz bittiğinde tarayıcı penceresini kapatın ve Ctrl+C ile Flask sunucusunu durdurun.
Bir Cloud Shell açma
https://portal.azure.com adresinden Azure portalında oturum açın.
Portal araç çubuğunda Cloud Shell düğmesini seçerek Azure CLI'yi açın.
Cloud Shell, tarayıcının alt kısmında görünür. Açılan menüden Bash'i seçin.
Size daha fazla çalışma alanı sağlamak için ekranı kapla düğmesini seçin.
Azure Uygulaması Hizmeti web uygulaması oluşturma
Azure portalında Cloud Shell'den Azure Uygulaması Service web uygulamanızı oluşturun.
İpucu
Cloud Shell'e yapıştırmak için Ctrl+Shift+V kullanın veya sağ tıklayıp bağlam menüsünden Yapıştır'ı seçin.
Deponuzu aşağıdaki komutla kopyalayın ve yerine
<repository-url>
çatallanmış deponuzun URL'sini yazın.git clone <repository-url>
Komutun uygulamayı Python uygulaması olarak tanıması için dizini kopyalanmış depo klasörüne
az webapp up
değiştirin.cd python-sample-vscode-flask-tutorial
App Service'i sağlamak ve uygulamanızın ilk dağıtımını yapmak için az webapp up komutunu kullanın. değerini Azure genelinde benzersiz bir adla değiştirin
<your-web-app-name>
. Genellikle, gibi<your-name>-flaskpipelines
bir uygulama tanımlayıcısı ile birlikte kişisel veya şirket adı kullanırsınız. Uygulama URL'si your-appservice.azurewebsites.net> olur<.az webapp up --name <your-web-app-name>
Komutun JSON çıkışı şunları
az webapp up
gösterir:{ "URL": <your-web-app-url>, "appserviceplan": <your-app-service-plan-name>, "location": <your-azure-location>, "name": <your-web-app-name>, "os": "Linux", "resourcegroup": <your-resource-group>, "runtime_version": "python|3.11", "runtime_version_detected": "-", "sku": <sku>, "src_path": <repository-source-path> }
URL
veruntime_version
değerlerini not edin. İşlem hattı YAML dosyasında öğesiniruntime_version
kullanırsınız.URL
, web uygulamanızın URL'sidir. Uygulamanın çalıştığını doğrulamak için bunu kullanabilirsiniz.Not
az webapp up
komutu şu eylemleri gerçekleştirir:Varsayılan bir kaynak grubu oluşturun.
Varsayılan bir App Service planı oluşturun.
Belirtilen ada sahip bir uygulama oluşturun.
Zip, derleme otomasyonu etkinleştirilmiş olarak geçerli çalışma dizinindeki tüm dosyaları dağıtın .
Parametreleri yerel olarak .azure/config dosyasında önbelleğe alın; böylece daha sonra proje klasöründen veya diğer
az webapp
komutlarlaaz webapp up
dağıtırken bunları yeniden belirtmeniz gerekmez. Önbelleğe alınan değerler varsayılan olarak otomatik olarak kullanılır.
Komut parametrelerini kullanarak varsayılan eylemi kendi değerlerinizle geçersiz kılabilirsiniz. Daha fazla bilgi için bkz . az webapp up.
python-sample-vscode-flask-tutorial uygulamasında web uygulaması için belirli başlangıç komutunu içeren bir startup.txt dosyası vardır. Web uygulaması
startup-file
yapılandırma özelliğini olarakstartup.txt
ayarlayın.Komut çıktısından
az webapp up
değeri kopyalayınresourcegroup
.Kaynak grubunu ve uygulamanızın adını kullanarak aşağıdaki komutu girin.
az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt
Komut tamamlandığında, web uygulamanızın tüm yapılandırma ayarlarını içeren JSON çıkışını gösterir.
Çalışan uygulamayı görmek için bir tarayıcı açın ve komut çıkışında gösterilene
URL
az webapp up
gidin. Genel bir sayfa görürseniz App Service'in başlatılması için birkaç saniye bekleyin ve sayfayı yenileyin. başlığınıVisual Studio Flask Tutorial
gördüğünüzden emin olun.
Azure DevOps projesi oluşturma
Yeni bir Azure DevOps projesi oluşturun.
- Tarayıcıda dev.azure.com gidin ve oturum açın.
- Kuruluşunuzu seçin.
- Kuruluştaki ilk projeyi oluşturuyorsanız Yeni proje'yi veya Proje oluştur'u seçerek yeni bir proje oluşturun.
- Bir Proje adı girin.
- Projenizin Görünürlüğünü seçin.
- Oluştur'u belirleyin.
- Tarayıcıda Azure DevOps Sunucunuza gidin.
- Koleksiyonunuzu seçin.
- Koleksiyonda ilk projeyi oluşturuyorsanız Yeni proje'yi veya Proje oluştur'u seçerek yeni bir proje oluşturun.
- Bir Proje adı girin.
- Projenizin Görünürlüğünü seçin.
- Oluştur'u belirleyin.
Hizmet sorumlusu oluşturma
Hizmet sorumlusu; uygulamaların, barındırılan hizmetlerin ve otomatik araçların Azure kaynaklarına erişmesi amacıyla oluşturulan kimliktir. Bu erişim, hizmet sorumlusuna atanan rollerle sınırlıdır ve hangi kaynaklara ve hangi düzeyde erişilebileceğini denetlemenizi sağlar.
Hizmet sorumlusu oluşturmak için cloud shell'e (bash) gidin ve aşağıdaki komutu çalıştırın. değerini hizmet sorumlunuzun adıyla, <your-subscription-id>
abonelik kimliğinizle ve <your-resource-group>
web uygulamasının kaynak grubuyla değiştirin<service-principal-name>
.
az ad sp create-for-rbac --display-name <service-principal-name> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>
komutu aşağıdaki örneğe benzer bir JSON nesnesi döndürür:
{
"clientId": "<client GUID>",
"clientSecret": "<string-value>",
"subscriptionId": "<subscription GUID>",
"tenantId": "<tenant GUID>",
...
}
, , clientSecret
subscriptionId
ve tenantId
değerlerini not clientId
edin. Sonraki bölümde hizmet bağlantısı oluşturmak için bu değerlere ihtiyacınız vardır.
Hizmet bağlantısı oluşturma
Hizmet bağlantısı, Azure Pipelines'tan dış ve uzak hizmetlere kimliği doğrulanmış erişim sağlamak için bir bağlantı oluşturmanıza olanak tanır. Azure Uygulaması Hizmeti web uygulamanıza dağıtmak için web uygulamasını içeren kaynak grubuna bir hizmet bağlantısı oluşturun.
Proje sayfasında Proje ayarları'nı seçin.
Menünün İşlem Hatları bölümünde Hizmet bağlantıları'nı seçin.
Hizmet bağlantısı oluştur’u seçin.
Azure Resource Manager'ı ve ardından İleri'yi seçin.
Kimlik doğrulama yönteminizi seçin ve İleri'yi seçin.
Yeni Azure hizmeti bağlantısı iletişim kutusunda, seçili kimlik doğrulama yöntemine özgü bilgileri girin. Kimlik doğrulama yöntemleri hakkında daha fazla bilgi için bkz . Azure Resource Manager hizmet bağlantısını kullanarak Azure'a bağlanma.
Örneğin, İş Yükü Kimliği federasyonu (otomatik) veya Hizmet sorumlusu (otomatik) kimlik doğrulama yöntemi kullanıyorsanız, gerekli bilgileri girin.
Alan Açıklama Kapsam düzeyi Abonelik seçin. Abonelik Azure aboneliğinizin adı. Kaynak grubu Web uygulamanızı içeren kaynak grubunun adı. Hizmet bağlantısı adı Bağlantı için açıklayıcı bir ad. Tüm işlem hatlarına erişim izinleri verme Tüm işlem hatlarına erişim vermek için bu seçeneği belirleyin. Kaydet'i seçin.
Yeni bağlantı Hizmet bağlantıları listesinde görünür ve Azure İşlem Hattınızda kullanıma hazırdır.
Proje sayfasında Proje ayarları'nı seçin.
Menünün İşlem Hatları bölümünde Hizmet bağlantıları'nı seçin.
Hizmet bağlantısı oluştur’u seçin.
Azure Resource Manager'ı ve ardından İleri'yi seçin.
Yeni Azure hizmet bağlantısı'nda Hizmet sorumlusu (el ile) seçeneğini belirleyin ve İleri'yi seçin
Sonraki iletişim kutusunda gerekli bilgileri doldurun.
Alan Açıklama Ortam Azure Cloud
öğesini seçin.Kapsam düzeyi Abonelik seçin. Abonelik Kimliği Abonelik kimliğiniz. Abonelik Adı Azure aboneliğinizin adı. Hizmet Sorumlusu Kimliği appId
Komutu tarafından döndürülen JSON nesnesinden gelenaz ad sp create-for-rbac
değer.Hizmet Sorumlusu Anahtarı password
Komutu tarafından döndürülen JSON nesnesinden gelenaz ad sp create-for-rbac
değer.Kiracı Kimliği tenant
Komutu tarafından döndürülen JSON nesnesinden gelenaz ad sp create-for-rbac
değer.Bağlantıyı doğrulamak için Doğrula'yı seçin.
Bir Hizmet bağlantı adı girin.
Tüm işlem hatlarına erişim izinleri ver seçeneğinin belirlendiğinden emin olun.
Doğrula ve kaydet'i seçin.
Yeni bağlantı Hizmet bağlantıları listesinde görünür ve Azure Pipelines'ın projeden kullanımına hazırdır.
Şirket içinde barındırılan aracı yapılandırma
Kendi şirket içinde barındırılan aracınızı kullanıyorsanız, aracıyı Python'ı çalıştıracak şekilde yapılandırmanız gerekir. Şirket içinde barındırılan aracılarda Python sürümlerinin indirilmesi desteklenmez. Python sürümünü önceden yüklemeniz gerekir. Python'ın pip uyumlu bir sürümünü almak için tam yükleyiciyi kullanın.
Uyumsuz sorunları önlemek için Python sürümünü Azure Uygulaması Services web uygulamanızdaki çalışma zamanı sürümüyle eşleştirmeniz gerekir. Çalışma zamanı sürümü, komutun JSON çıkışında az webapp up
gösterilir.
Görevin kullanabilmesi için istenen Python sürümünün şirket içinde barındırılan aracıdaki araç önbelleğine eklenmesi gerekir. Normalde araç önbelleği aracının _work/_tool dizini altında bulunur; alternatif olarak, yol ortam değişkeni AGENT_TOOLSDIRECTORY geçersiz kılınabilir. Araçlar dizininin altında Python sürümünüzü temel alan aşağıdaki dizin yapısını oluşturun:
$AGENT_TOOLSDIRECTORY/
Python/
{version number}/
{platform}/
{tool files}
{platform}.complete
Sürüm numarası 1.2.3 biçiminde olmalıdır. Platform x86 veya x64 olmalıdır. Araç dosyaları sıkıştırması açılmış Python sürüm dosyaları olmalıdır. veya {platform}.complete
gibi x86.complete
x64.complete
görünen ve aracın önbelleğe düzgün şekilde yüklendiğini gösteren 0 baytlık bir dosya olmalıdır.
Örneğin, 64 bit Windows makinesinde Python 3.11 kullanıyorsanız dizin yapısı şöyle görünür:
$AGENT_TOOLSDIRECTORY/
Python/
3.11.4/
x64/
{python files}
x64.complete
Aracınızı barındıran makinede kullanmak istediğiniz Python sürümüne zaten sahipseniz, dosyaları araç önbelleğine kopyalayabilirsiniz. Python sürümünüz yoksa Python web sitesinden indirebilirsiniz.
İşlem hattı oluşturma
Python web uygulamanızı derlemek ve Azure Uygulaması Service'e dağıtmak için bir işlem hattı oluşturun. İşlem hattı kavramlarını anlamak için aşağıdakileri izleyin:
Sol gezinti menüsünde İşlem hatları'nı seçin.
İşlem Hattı Oluştur'u seçin.
Kodunuz nerede iletişim kutusunda GitHub'ı seçin. GitHub'da oturum açmanız istenebilir.
Depo seçin ekranında, çatallanmış örnek depoyu seçin.
Onay olarak GitHub parolanızı yeniden girmeniz istenebilir.
Azure Pipelines uzantısı GitHub'da yüklü değilse GitHub, Azure Pipelines uzantısını yüklemenizi ister.
Bu sayfada, aşağı kaydırarak Depo erişimi bölümüne gidin, uzantının tüm depolara mı yoksa yalnızca seçili depolara mı yükleneceğini seçin ve ardından Onayla ve yükle'yi seçin.
İşlem hattınızı yapılandırın iletişim kutusunda Azure'da Python'ı Linux Web App'e seçin.
Azure aboneliğinizi seçin ve Devam'ı seçin.
Kimlik doğrulaması için kullanıcı adınızı ve parolanızı kullanıyorsanız Microsoft hesabınızda oturum açmanız için bir tarayıcı açılır.
Açılan listeden web uygulamanızın adını seçin ve Doğrula ve yapılandır'ı seçin.
Azure Pipelines bir azure-pipelines.yml dosyası oluşturur ve dosyayı YAML işlem hatları düzenleyicisinde görüntüler. İşlem hattı dosyası CI/CD işlem hattınızı, her adımın farklı görevler ve betikler için ayrıntıları içerdiği aşamalar, İşler ve adımlar dizisi olarak tanımlar. İşlem hattına göz atarak ne yaptığını görün. Tüm varsayılan girişlerin kodunuz için uygun olduğundan emin olun.
Gezinti menüsünde İşlem hatları'nı seçin.
İşlem Hattı Oluştur'u seçin.
Kodunuz nerede iletişim kutusunda GitHub Enterprise Server'ı seçin. GitHub'da oturum açmanız istenebilir.
Depo seçin sekmesinde, çatallanmış örnek depoyu seçin.
Onay olarak GitHub parolanızı yeniden girmeniz istenebilir.
Azure Pipelines uzantısı GitHub'da yüklü değilse GitHub, Azure Pipelines uzantısını yüklemenizi ister.
Bu sayfada, aşağı kaydırarak Depo erişimi bölümüne gidin, uzantının tüm depolara mı yoksa yalnızca seçili depolara mı yükleneceğini seçin ve ardından Onayla ve yükle'yi seçin.
İşlem hattınızı yapılandırın iletişim kutusunda Başlangıç işlem hattı'nı seçin.
azure-pipelines.yml dosyasının içeriğini aşağıdaki kodla değiştirin.
trigger: - main variables: # Azure Resource Manager connection created during pipeline creation azureServiceConnectionId: '<your-service-connection-name>' # Web app name webAppName: '<your-web-app-name>' # Environment name environmentName: '<your-web-app-name>' # Project root folder. projectRoot: $(System.DefaultWorkingDirectory) # Python version: pythonVersion: '<your-python-version>' stages: - stage: Build displayName: Build stage jobs: - job: BuildJob pool: name: '<your-pool-name>' demands: python steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install -r requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements" - task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container' - stage: Deploy displayName: 'Deploy Web App' dependsOn: Build condition: succeeded() jobs: - deployment: DeploymentJob pool: name: '<your-pool-name' environment: $(environmentName) strategy: runOnce: deploy: steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version' - task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Aşağıdaki yer tutucuları kendi değerlerinizle değiştirin:
Yer tutucu Açıklama <your-service-connection-name>
Oluşturduğunuz hizmet bağlantısının adı. <your-web-app-name>
Azure Uygulaması Service web uygulamanızın adı. <your-pool-name>
Kullanmak istediğiniz aracı havuzunun adı. <your-python-version>
Aracınızda çalışan Python sürümü. Bu sürümü web uygulamanızda çalışan Python sürümüyle eşleştirmek iyi bir fikirdir. Web uygulaması sürümü, komutun JSON çıkışında az webapp up
gösterilir.
YAML işlem hattı dosyası
Aşağıdaki açıklama YAML işlem hattı dosyasını açıklar. İşlem hattı YAML dosya şeması hakkında bilgi edinmek için bkz . YAML şema başvurusu.
Örnek işlem hattı YAML dosyasının tamamı aşağıda gösterilmiştir:
trigger:
- main
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder. Point to the folder containing manage.py file.
projectRoot: $(System.DefaultWorkingDirectory)
pythonVersion: '3.11'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m venv antenv
source antenv/bin/activate
python -m pip install --upgrade pip
pip install setup
pip install -r requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
displayName: 'Upload package'
artifact: drop
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Değişkenler
variables
bölümü aşağıdaki değişkenleri içerir:
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to match the Python runtime version running on your web app.
pythonVersion: '3.11'
Değişken | Açıklama |
---|---|
azureServiceConnectionId |
Azure Resource Manager hizmet bağlantısının kimliği veya adı. |
webAppName |
Azure Uygulaması Hizmeti web uygulamasının adı. |
vmImageName |
Derleme aracısı için kullanılacak işletim sisteminin adı. |
environmentName |
Dağıtım aşamasında kullanılan ortamın adı. Aşama işi çalıştırıldığında ortam otomatik olarak oluşturulur. |
projectRoot |
Uygulama kodunu içeren kök klasör. |
pythonVersion |
Derleme ve dağıtım aracılarında kullanılacak Python sürümü. |
variables
bölümü aşağıdaki değişkenleri içerir:
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<your-service-connection-name>'
# Web app name
webAppName: '<your-webapp-name>'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to the version that is running on your agent and web app.
pythonVersion: '3.11'
Değişken | Açıklama |
---|---|
azureServiceConnectionId |
Azure Resource Manager hizmet bağlantısının adı. |
webAppName |
Web uygulamasının adı. |
environmentName |
Dağıtım aşamasında kullanılan ortamın adı. |
projectRoot |
Uygulama kodunu içeren klasör. Değer, otomatik bir sistem değişkenidir. |
pythonVersion |
Derleme ve dağıtım aracılarında kullanılacak Python sürümü. |
Derleme aşaması
Derleme aşaması, vmImageName değişkeninde tanımlanan işletim sisteminde çalışan tek bir iş içerir.
- job: BuildJob
pool:
vmImage: $(vmImageName)
Derleme aşaması, ad parametresi tarafından tanımlanan havuzdaki bir aracıda çalışan tek bir iş içerir. Aracı özelliklerini anahtar sözcüğüyle demands
belirtebilirsiniz. Örneğin, demands: python
aracıda Python'ın yüklü olması gerektiğini belirtir. Şirket içinde barındırılan aracıyı ada göre belirtmek için anahtar sözcüğünü demands: Agent.Name -equals <agent-name>
kullanabilirsiniz.
- job: BuildJob
pool:
name: <your-pool-name>
demands: python
İş birden çok adım içerir:
UsePythonVersion görevi kullanılacak Python sürümünü seçer. Sürüm, değişkeninde
pythonVersion
tanımlanır.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'
Bu adım, sanal bir Python ortamı oluşturmak ve uygulama bağımlılıklarını
requirements.txt
yüklemek için bir betik kullanır. ParametreworkingDirectory
, uygulama kodunun konumunu belirtir.- script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setup pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"
ArchiveFiles görevi, web uygulamasını içeren .zip arşivini oluşturur. Dosya
.zip
, adlıdrop
yapıt olarak işlem hattına yüklenir. Dosya.zip
, uygulamayı web uygulamasına dağıtmak için dağıtım aşamasında kullanılır.- task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop
Parametre Açıklama rootFolderOrFile
Uygulama kodunun konumu. includeRootFolder
Kök klasörün .zip dosyasına eklenip eklenmeyeceğini gösterir. Bu parametreyi false
aksi şekilde ayarlayın, .zip dosyasının içeriği s adlı bir klasöre yerleştirilir ve Linux üzerinde App Service kapsayıcısı uygulama kodunu bulamaz.archiveType
Oluşturulacak arşiv türü. zip
olarak ayarlayın.archiveFile
Oluşturulacak .zip dosyasının konumu. replaceExistingArchive
Dosya zaten varsa var olan bir arşivin değiştirilip değiştirilmeyeceğini gösterir. true
olarak ayarlayın.upload
Karşıya yüklenecek .zip dosyasının konumu. artifact
Oluşturulacak yapıtın adı.
Dağıtım aşaması
Derleme aşaması başarıyla tamamlanırsa dağıtım aşaması çalıştırılır. Aşağıdaki anahtar sözcükler bu davranışı tanımlar:
dependsOn: Build
condition: succeeded()
Dağıtım aşaması, aşağıdaki anahtar sözcüklerle yapılandırılmış tek bir dağıtım işi içerir:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
Anahtar sözcük | Açıklama |
---|---|
deployment |
İşin bir ortamı hedefleyen bir dağıtım işi olduğunu gösterir. |
pool |
Dağıtım aracısı havuzunu belirtir. Ad belirtilmemişse varsayılan aracı havuzu. anahtar sözcüğü, vmImage aracının sanal makine görüntüsü için işletim sistemini tanımlar |
environment |
Dağıtılacak ortamı belirtir. İş çalıştırıldığında projenizde ortam otomatik olarak oluşturulur. |
- deployment: DeploymentJob
pool:
name: <your-pool-name>
environment: $(environmentName)
Anahtar sözcük | Açıklama |
---|---|
deployment |
İşin bir ortamı hedefleyen bir dağıtım işi olduğunu gösterir. |
pool Dağıtım için kullanılacak aracı havuzunu belirtir. Bu havuz, işlem hattında belirtilen Python sürümünü çalıştırma özelliğine sahip bir aracı içermelidir. |
|
environment |
Dağıtılacak ortamı belirtir. İş çalıştırıldığında projenizde ortam otomatik olarak oluşturulur. |
strategy
anahtar sözcüğü, dağıtım stratejisini tanımlamak için kullanılır. runOnce
anahtar sözcüğü, dağıtım işinin bir kez çalıştırıldığını belirtir. deploy
anahtar sözcüğü, dağıtım işinde çalıştırılacak adımları belirtir.
strategy:
runOnce:
deploy:
steps:
steps
İşlem hattındakiler şunlardır:
Aracıda kullanılacak Python sürümünü belirtmek için UsePythonVersion görevini kullanın. Sürüm, değişkeninde
pythonVersion
tanımlanır.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
AzureWebApp@1 kullanarak web uygulamasını dağıtın. Bu görev, işlem hattı yapıtını
drop
web uygulamanıza dağıtır.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Parametre Açıklama azureSubscription
Kullanılacak Azure Resource Manager hizmet bağlantı kimliği veya adı. appName
Web uygulamasının adı. package
Dağıtılacak .zip dosyasının konumu. Ayrıca, python-vscode-flask-tutorial deposu startup.txt adlı bir dosyada aynı başlangıç komutunu içerdiğinden, parametresini ekleyerek bu dosyayı belirtebilirsiniz:
startUpCommand: 'startup.txt'
.
steps
İşlem hattındakiler şunlardır:
Aracıda kullanılacak Python sürümünü belirtmek için UsePythonVersion görevini kullanın. Sürüm, değişkeninde
pythonVersion
tanımlanır.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
AzureWebApp@1 kullanarak web uygulamasını dağıtın. Bu görev, işlem hattı yapıtını
drop
web uygulamanıza dağıtır.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Parametre Açıklama azureSubscription
Kullanılacak Azure Resource Manager hizmet bağlantı kimliği veya adı. appName
Web uygulamasının adı. package
Dağıtılacak .zip dosyasının konumu. Ayrıca, python-vscode-flask-tutorial deposu startup.txt adlı bir dosyada aynı başlangıç komutunu içerdiğinden, parametresini ekleyerek bu dosyayı belirtebilirsiniz:
startUpCommand: 'startup.txt'
.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : $(webAppName)' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Parametre Açıklama azureSubscription
Kullanılacak Azure Resource Manager hizmet bağlantı kimliği veya adı. appName
Web uygulamasının adı. package
Dağıtılacak .zip dosyasının konumu. startUpCommand
Uygulama dağıtıldıktan sonra çalıştırılacak komut. Örnek uygulama kullanır startup.txt
.
İşlem hattını çalıştırma
Artık denemeye hazırsınız!
Düzenleyicide Kaydet ve çalıştır'ı seçin.
Kaydet ve çalıştır iletişim kutusunda bir işleme iletisi ekleyin, ardından Kaydet ve çalıştır'ı seçin.
İşlem hattı çalıştırma özetinde Aşamalar veya İşler'i seçerek işlem hattını çalışırken izleyebilirsiniz.
Her aşamanın ve işin yanında başarıyla tamamlandığında yeşil onay işaretleri vardır. Hatalar oluşursa, bunlar özette veya iş adımlarında görüntülenir.
Özet sayfasının sağ üst kısmındaki dikey noktaları seçip İşlem hattını düzenle'yi seçerek YAML düzenleyicisine hızla dönebilirsiniz:
Dağıtım işinden Azure Web App'i Dağıt görevini seçerek çıktısını görüntüleyin. Dağıtılan siteyi ziyaret etmek için Ctrl tuşunu basılı tutarak url'yi seçin
App Service Application URL
.Örnek uygulamayı kullanıyorsanız, uygulama aşağıdaki gibi görünmelidir:
Önemli
Uygulamanız eksik bağımlılık nedeniyle başarısız olursa requirements.txt dosyanız dağıtım sırasında işlenmez. Bu davranış, web uygulamasını bu makalede gösterildiği gibi komutunu kullanmak az webapp up
yerine doğrudan portalda oluşturduysanız oluşur.
komutu özellikle az webapp up
derleme eylemini SCM_DO_BUILD_DURING_DEPLOYMENT
olarak true
ayarlar. Uygulama hizmetini portal aracılığıyla sağladıysanız, bu eylem otomatik olarak ayarlanmaz.
Aşağıdaki adımlar eylemi ayarlar:
- Azure portalını açın, App Service'inizi ve ardından Yapılandırma'yı seçin.
- Uygulama Ayarları sekmesinin altında Yeni Uygulama Ayarı'nı seçin.
- Açılan pencerede, Ad
SCM_DO_BUILD_DURING_DEPLOYMENT
olarak ayarlayın, Değertrue
olarak ayarlayın ve Tamam'ı seçin. - Yapılandırma sayfasının üst kısmındaki Kaydet'i seçin.
- İşlem hattını yeniden çalıştırın. Bağımlılıklarınız dağıtım sırasında yüklenmelidir.
İşlem hattı çalıştırmasını tetikleme
İşlem hattı çalıştırmasını tetikleme için depoda bir değişiklik gerçekleştirin. Örneğin, uygulamaya yeni bir özellik ekleyebilir veya uygulamanın bağımlılıklarını güncelleştirebilirsiniz.
- GitHub deponuza gidin.
- Kodda, örneğin uygulamanın başlığını değiştirme gibi bir değişiklik yapın.
- Değişikliği deponuza işleyin.
- İşlem hattınıza gidin ve yeni bir çalıştırma oluşturulduğunu doğrulayın.
- Çalıştırma tamamlandığında yeni derlemenin web uygulamanıza dağıtıldığından emin olun.
- Azure portalında web uygulamanıza gidin.
- Dağıtım Merkezi'ni seçin ve Günlükler sekmesini seçin.
- Yeni dağıtımın listelendiğini doğrulayın.
Django için dikkat edilmesi gerekenler
Ayrı bir veritabanı kullanıyorsanız Django uygulamalarını Linux'ta Azure Uygulaması Hizmeti'ne dağıtmak için Azure Pipelines'ı kullanabilirsiniz. App Service db.sqlite3 dosyasını kilitleyerek hem okumaları hem de yazmaları engellediği için SQLite veritabanı kullanamazsınız. Bu davranış dış veritabanını etkilemez.
App Service'te Python uygulamasını yapılandırma - Kapsayıcı başlatma işlemi bölümünde açıklandığı gibi App Service, uygulama kodunuz içinde genellikle uygulama nesnesini içeren bir wsgi.py dosyasını otomatik olarak arar. Başlangıç komutunu herhangi bir şekilde özelleştirmek istiyorsanız, önceki bölümde açıklandığı gibi YAML işlem hattı dosyanızın adımındaki parametresini AzureWebApp@1
kullanınstartUpCommand
.
Django kullanırken genellikle uygulama kodunu dağıtdıktan sonra kullanarak manage.py migrate
veri modellerini geçirmek istersiniz. Bu amaçla dağıtım sonrası betiğiyle ekleyebilirsiniz startUpCommand
. Örneğin, AzureWebApp@1 görevindeki özelliği aşağıda startUpCommand
verilmiştir.
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
startUpCommand: 'python manage.py migrate'
Derleme aracısı üzerinde test çalıştırma
Derleme işleminizin bir parçası olarak, uygulama kodunuz üzerinde testler çalıştırmak isteyebilirsiniz. Testler derleme aracısı üzerinde çalıştırıldığından, bağımlılıklarınızı derleme aracısının sanal ortamına yüklemeniz gerekir. Testler çalıştırıldıktan sonra, dağıtım için .zip dosyasını oluşturmadan önce sanal ortamı silin. Aşağıdaki betik öğeleri bu işlemi gösterir. Bunları azure-pipelines.yml dosyasında görevin önüne ArchiveFiles@2
yerleştirin. Daha fazla bilgi için bkz . Platformlar arası betikleri çalıştırma.
# The | symbol is a continuation character, indicating a multi-line script.
# A single-line script can immediately follow "- script:".
- script: |
python -m venv .env
source .env/bin/activate
pip install setuptools
pip install -r requirements.txt
# The displayName shows in the pipeline UI when a build runs
displayName: 'Install dependencies on build agent'
- script: |
# Put commands to run tests here
displayName: 'Run tests'
- script: |
echo Deleting .env
deactivate
rm -rf .env
displayName: 'Remove .env before zip'
Test sonuçlarını işlem hattınızda yayımlamak için PublishTestResults@2 gibi bir görev de kullanabilirsiniz. Daha fazla bilgi için bkz . Python uygulamaları oluşturma - Testleri çalıştırma.
Kaynakları temizleme
Bu öğreticide oluşturulan Azure kaynaklarında ücret yansıtılmasını önlemek için:
Oluşturduğunuz projeyi silin. Proje silindiğinde işlem hattı ve hizmet bağlantısı silinir.
App Service'i ve App Service Planını içeren Azure kaynak grubunu silin. Azure portalında kaynak grubuna gidin, Kaynak grubunu sil'i seçin ve istemleri izleyin.
Cloud Shell için dosya sistemini koruyan depolama hesabını silin. Cloud Shell'i kapatın ve cloud-shell-storage- ile başlayan kaynak grubuna gidin, Kaynak grubunu sil'i seçin ve istemleri izleyin.