Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Ürün | Gereksinimler |
---|---|
Azure DevOps | - Azure DevOps projesi. - Microsoft tarafından barındırılan ajanlarda pipeline'ları çalıştırma yeteneği. Paralel bir iş satın alabilir veya ücretsiz katman isteyebilirsiniz. - YAML ve Azure Pipelines hakkında temel bilgiler. Daha fazla bilgi için bkz. İlk işlem hattınızı oluşturma. - İzinler: - Bir işlem hattı oluşturmak için Katkıda Bulunanlar grubunda yer almanız ve grubun Derleme işlem hattı oluşturma izninin İzin Ver olarak ayarlanmış olması gerekir. Proje Yöneticileri grubunun üyeleri işlem hatlarını yönetebilir. - Hizmet bağlantıları oluşturmak için: |
GitHub (İngilizce) | - GitHub hesabı. - Azure Pipelines'ı yetkilendirmek için bir GitHub hizmet bağlantısı . |
Gök mavisi | Bir Azure aboneliği. |
Ürün | Gereksinimler |
---|---|
Azure DevOps | - Azure DevOps projesi. - Kendi kendine barındırılan bir aracı. Bir tane oluşturmak için bkz. Kendi barındırdığı aracılar. - YAML ve Azure Pipelines hakkında temel bilgiler. Daha fazla bilgi için bkz. İlk işlem hattınızı oluşturma. - İzinler: - Bir işlem hattı oluşturmak için Katkıda Bulunanlar grubunda yer almanız ve grubun Derleme işlem hattı oluşturma izninin İzin Ver olarak ayarlanmış olması gerekir. Proje Yöneticileri grubunun üyeleri işlem hatlarını yönetebilir. - Hizmet bağlantıları oluşturmak için: |
GitHub (İngilizce) | - GitHub hesabı. - Azure Pipelines'ı yetkilendirmek için bir GitHub hizmet bağlantısı . |
Gök mavisi | Bir Azure aboneliği. |
Uygulama kodunuz için depo oluşturma
GitHub hesabınıza https://github.com/Microsoft/python-sample-vscode-flask-tutorial konumundaki örnek depoyu forklayın.
Yerel ana bilgisayarınızda GitHub deponuzu kopyalayın. Aşağıdaki komutu kullanın, <repository-url>
öğesini çatalladığınız deponuzun URL'si ile değiştirerek.
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.
Çalışma alanınızı genişletmek için tam ekran 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 komutu kullanarak kopyalayın, ardından
<repository-url>
yerine çatalladığınız 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. Azure genelinde benzersiz bir ad ile
<your-web-app-name>
öğesini değiştirin. Genellikle,<your-name>-flaskpipelines
gibi bir uygulama tanımlayıcı ile birlikte kişisel veya şirket adını kullanırsınız. Uygulama URL'si your-appservice.azurewebsites.net<>.az webapp up --name <your-web-app-name>
az webapp up
komutunun JSON çıktısı şunu 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ındaruntime_version
öğesini 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 deploy geçerli çalışma dizinindeki tüm dosyaları, derleme otomasyonu etkinleştirilmiş olarak 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 up
komutlarlaaz webapp
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 seçin.
- 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 seçin.
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. Hizmet sorumlunuz için bir ad ile <service-principal-name>
, <your-subscription-id>
abonelik kimliğinizle ve <your-resource-group>
web uygulaması için kaynak grubuyla değiştirin.
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>",
...
}
clientId
, clientSecret
, subscriptionId
, ve tenantId
değerlerini not 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'i 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 verin 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ı'ndaHizmet sorumlusu (el ile) seçeneğini belirleyin ve İleri'yi seçin
Sonraki iletişim kutusunda gerekli bilgileri doldurun.
Alan Açıklama Çevre Azure Cloud
öğesini seçin.Kapsam düzeyi Abonelik'i 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, ajanının _work/_tool dizini altında bulunur; bunun alternatifi olarak, yol AGENT_TOOLSDIRECTORY ortam değişkeni ile değiştirilebilir. 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 navigasyon menüsünde Pipelines'i 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ç ekranında, fork edilmiş ö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.
İş hattınızı yapılandırma iletişim kutusunda Azure'da Linux Web Uygulaması için Python'ı 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ı aşamalar, Görevler ve adımlar dizisi olarak tanımlar; her adım, farklı görevler ve betikler için ayrıntıları içerir. İş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 Boru 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ç 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 Uygulama Hizmeti web uygulamanızın adı. <your-pool-name>
Kullanmak istediğiniz aracı havuzunun adı. <your-python-version>
Ajanı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 referansı.
Ö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 setuptools
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 görevi ç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ü. |
Oluşturma 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. Kendi kendine barındırılan aracıyı ada göre belirtmek için demands: Agent.Name -equals <agent-name>
anahtar sözcüğünü 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 setuptools pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"
ArchiveFiles görevi, web uygulamasını içeren .zip arşivi oluşturur.
.zip
dosyası,drop
adıyla eser 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 olarak ayarlayın, .zip dosyasının içeriği s adlı bir klasöre yerleştirilir ve Linux kapsayıcısında App Service 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 mevcutsa var olan bir arşivin değiştirilip değiştirilmediğ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 kelime | 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 ajanı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 kelime | 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.txtadlı 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.txtadlı 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 startup.txt
kullanır.
İş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ı tutun ve
App Service Application URL
ardından URL'yi seçin.Ö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 az webapp up
komutunu kullanarak değil de doğrudan portalda oluşturduysanız meydana gelir.
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ışmasını tetiklemek için depoda bir değişiklik yapın. Ö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 startUpCommand
kullanınAzureWebApp@1
.
Django kullanırken genellikle uygulama kodunu dağıttıktan sonra veri modellerini manage.py migrate
kullanarak geçirmek istersiniz. Bu amaçla startUpCommand
öğesini dağıtım sonrası betiği ile ekleyebilirsiniz. Örneğin, AzureWebApp@1 görevindeki startUpCommand
özelliği burada.
- 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.ymlArchiveFiles@2
önüne yerleştirin. Daha fazla bilgi için Platformlar arası betikleri çalıştırma bölümüne bakınız.
# 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.