Aracılığıyla paylaş


Azure Uygulaması Hizmeti'ne python web uygulaması derlemek ve dağıtmak için Azure Pipelines'ı kullanma

Azure DevOps Hizmetleri

Bu öğreticide, Linux üzerinde Azure App Service'e python web uygulaması derlemek ve dağıtmak üzere sürekli tümleştirme ve sürekli teslim (CI/CD) için Azure Pipelines'ın nasıl kullanılacağı gösterilmektedir. İşlem hattınız, uygulama kodu deponuza bir işleme olduğunda Python web uygulamanızı otomatik olarak derler ve App Service'e dağıtır.

Bu eğitimde, siz:

  • Bir Python web uygulaması oluşturun ve Azure App Service'e yükleyin.
  • Azure DevOps projenizi Azure'a bağlayın.
  • Uygulamanız için Azure Pipelines Python'a özgü bir derleme ve dağıtım işlem hattı oluşturun.
  • Azure App Service web uygulamanızı derlemek, test etmek ve dağıtmak için işlem hattını çalıştırın.
  • Deponuza her işlendiğinde işlem hattını çalıştırmak için bir tetikleyici ayarlayın.

Azure Pipelines kavramları hakkında daha fazla bilgi edinmek için aşağıdaki videoyu izleyin:

Ö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:hizmet bağlantıları için Yönetici veya Oluşturucu rolüne sahip olmanız gerekir.
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:hizmet bağlantıları için Yönetici veya Oluşturucu rolüne sahip olmanız gerekir.
GitHub (İngilizce) - GitHub hesabı.
- Azure Pipelines'ı yetkilendirmek için bir GitHub hizmet bağlantısı .
Gök mavisi Bir Azure aboneliği.

Şirket içinde barındırılan aracı yapılandırma

Şirket içinde barındırılan derleme aracılarında Python sürümlerinin indirilmesi desteklenmez. Kendi şirket içinde barındırılan aracınızı kullanmak için aracıyı Python'ı çalıştıracak şekilde yapılandırmanız gerekir.

Uyumluluk sorunlarını önlemek için Python sürümünü Azure App Services web uygulamanızdaki 3.11 çalışma zamanı sürümüyle eşleştirin. 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.

İşlem hattı görevinin 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 dizininde bulunur. Alternatif olarak, yolunu ortam değişkeniyle AGENT_TOOLSDIRECTORYgeçersiz kılabilirsiniz. Araçlar dizininin altında Python sürümünüz temelinde 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.completex64.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, Python 3.11'i 64 bit windows makinesinde kullanmak için aşağıdaki dizin yapısını oluşturun:

$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ü zaten varsa, dosyaları araç önbelleğine kopyalayabilirsiniz. Python sürümünüz yoksa Python web sitesinden indirebilirsiniz.

Örnek uygulamayı hazırlama

  1. GitHub hesabınıza https://github.com/Microsoft/python-sample-vscode-flask-tutorial konumundaki örnek depoyu forklayın.

  2. kullanarak git clone <your-forked-repository-url>.gitçatalınızı yerel makinenize kopyalayın.

  3. kullanarak cd python-sample-vscode-flask-tutorialyerel kopyanıza gidin ve çalıştığından emin olmak için uygulamayı yerel olarak derleyip çalıştırın.

    python -m venv .env
    source .env/Scripts/activate
    pip install --upgrade pip
    pip install -r ./requirements.txt
    export FLASK_APP=hello_app.webapp
    flask run
    
  4. Uygulamayı test etmek için bir tarayıcı penceresine http://localhost:5000 gidin ve Visual Studio Flask Öğreticisi başlığını gördüğünüzden emin olun.

  5. Tarayıcı penceresini kapatın ve Ctrl+C kullanarak Flask sunucusunu durdurun.

App Service web uygulamasını oluşturma ve dağıtma

Azure portalda Cloud Shell kullanarak Azure App Service web uygulamanızı oluşturun. Cloud Shell'i kullanmak için Azure portalında oturum açın ve araç çubuğundaki Cloud Shell düğmesini seçin.

Azure portalı araç çubuğundaki Azure Cloud Shell düğmesinin ekran görüntüsü.

Cloud Shell, tarayıcının alt kısmında görünür. Açılan menüde ortam olarak Bash'in seçildiğinden emin olun. Kendinize daha fazla yer açmak için Cloud Shell penceresini en üst düzeye çıkarabilirsiniz.

Azure Cloud Shell'in ekran görüntüsü.

İ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.

Web uygulamasını oluşturma ve dağıtma

  1. Cloud Shell'de, aşağıdaki komutu kullanarak çatallanmış deponuzu Azure'a kopyalayın ve yerine çatalı yapılan deponuzun URL'sini yazın <your-forked-repository-url> .

    git clone <your-forked-repository-url>
    
  2. Dizini kopyalanmış depo klasörüne değiştirin.

    cd python-sample-vscode-flask-tutorial
    
  3. App Service web uygulamasını sağlamak ve ilk dağıtımı yapmak için az webapp up komutunu çalıştırın. Azure genelinde benzersiz bir ad atamak için parametresini --name <your-web-app-name> kullanın; örneğin, bir uygulama tanımlayıcısı ile birlikte kişisel veya şirket adı gibi --name <your-name>-flaskpipelines. Parametresiz çalıştırılırsa az webapp up , Azure'da benzersiz olan rastgele oluşturulmuş bir web uygulaması adı atanır.

    az webapp up --name <your-web-app-name>
    

komutu az webapp up uygulamayı Python uygulaması olarak tanır ve aşağıdaki eylemleri gerçekleştirir:

  1. Varsayılan bir kaynak grubu oluşturur.
  2. Varsayılan bir App Service planı oluşturur.
  3. Atanan ada sahip bir web uygulaması oluşturur. Uygulama URL şeklindedir <your-web-app-name>.azurewebsites.net.
  4. Derleme otomasyonu etkinken geçerli çalışma dizinindeki tüm dosyaları bir ZIP arşivine dağıtır.
  5. Parametreleri yerel olarak .azure/config dosyasında önbelleğe alır, böylece proje klasöründen veya başka az webapp up komutlarla az webapp dağıtırken bunları yeniden belirtmeniz gerekmez. Komutlar, önbelleğe alınan değerleri varsayılan olarak otomatik olarak kullanır.

Komut parametrelerini kullanarak varsayılan eylemleri kendi değerlerinizle geçersiz kılabilirsiniz. Daha fazla bilgi için bkz. az webapp up.

komutu az webapp up , örnek web uygulaması için aşağıdaki JSON çıkışını oluşturur:

{
  "URL": <your-web-app-url>,
  "appserviceplan": <your-app-service-plan-name>,
  "location": <your-azure-region>,
  "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>
}

Bu öğreticinin URLilerleyen bölümlerinde kullanmak üzere , resourcegroupve runtime_version değerlerini kaydedin.

Başlangıç komutunu ayarlama

python-sample-vscode-flask-tutorial uygulamasında, web uygulaması için belirli başlangıç komutunu içeren bir startup.txt dosyası vardır. Kaynak grubunuzu ve web uygulaması startup-file adlarınızı kullanarak aşağıdaki komutu girerek web uygulaması yapılandırma özelliğini startup.txt olarak ayarlayın.

az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt

Komut tamamlandığında, JSON çıkışı web uygulamanızın tüm yapılandırma ayarlarını gösterir.

Çalışan uygulamayı görmek için bir tarayıcı açın ve komut çıkışında gösterilene URLaz webapp up gidin. Genel bir sayfa görürseniz App Service'in başlatılması için birkaç saniye bekleyin ve sayfayı yenileyin. Visual Studio Flask Öğreticisi başlığını gördüğünüzden emin olun.

Azure DevOps projenizi Azure aboneliğinize bağlama

Azure Pipelines'ı kullanarak Azure App Service web uygulamanıza dağıtmak için Azure DevOps projenizi Azure kaynaklarınıza bağlamanız gerekir.

Hizmet sorumlusu oluşturma

Hizmet sorumlusu, Azure kaynaklarına erişmek için uygulamalar, barındırılan hizmetler ve otomatik araçlar için oluşturulan bir kimliktir. Bu erişim, hizmet sorumlusuna atanan rollerle sınırlıdır ve hangi kaynaklara hangi düzeyde erişilebileceğini denetlemenizi sağlar.

Hizmet sorumlusu oluşturmak için Bash Cloud Shell'de aşağıdaki komutu çalıştırın. değerini hizmet sorumlunuzun adıyla, <service-principal-name> Azure abonelik kimliğinizle ve <your-subscription-id> web uygulamasının kaynak grubuyla değiştirin<your-resource-group>.

az ad sp create-for-rbac --display-name <service-principal-name> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>

Komut aşağıdaki JSON nesnesini döndürür:

{
  "appId": "<client GUID>",
  "displayName": "<service-principal-name">,
  "password": "<password-string>",
  "tenant": "<tenant GUID>"
  ...
}

Sonraki bölümde hizmet bağlantısı oluşturmak için kullanılacak , appIdve password değerlerini not tenantIdedin.

Hizmet bağlantısı oluşturma

Hizmet bağlantısı, Azure Pipelines'tan dış ve uzak hizmetlere kimliği doğrulanmış erişim sağlar. Azure App Service web uygulamanıza dağıtmak için web uygulamanızın kaynak grubuna bir hizmet bağlantısı oluşturun.

  1. Azure DevOps proje sayfanızda Proje ayarları'nı seçin.

  2. Proje Ayarları'ndanİşlem Hatları>Hizmeti bağlantıları'nı seçin.

  3. Hizmet bağlantıları sayfasında Yeni hizmet bağlantısı'nı veya bu hizmet bağlantısı projedeki ilk hizmet bağlantısıysa Hizmet bağlantısı oluştur'u seçin.

    Proje Ayarları'nda İşlem Hattı Hizmeti bağlantılarını seçme işleminin ekran görüntüsü.

  4. Yeni hizmet bağlantısı ekranında Azure Resource Manager'ı ve ardından İleri'yi seçin.

    Azure Resource Manager hizmet bağlantısı seçiminin ekran görüntüsü.

  5. Yeni Azure hizmeti bağlantısı ekranında Kimlik türünüzü seçin. Bu örnekte önerilen Uygulama kaydı (otomatik) kullanılır. 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.

  6. Kimlik Bilgileri için İş yükü kimlik federasyonu (otomatik)'i seçin.

  7. Aşağıdaki alanları tamamlayın:

    • Kapsam düzeyi: Abonelik'i seçin.
    • Abonelik: Azure aboneliğinizi seçin.
    • Kaynak grubu: Web uygulamanızı içeren kaynak grubunu seçin.
    • Hizmet Bağlantısı Adı: Bağlantı için açıklayıcı bir ad girin.
    • Tüm işlem hatlarına erişim izinleri ver: Projedeki tüm işlem hatlarına erişim vermek için bu onay kutusunu seçin.
  8. Kaydet'i seçin.

    Yeni Azure hizmeti bağlantısı iletişim kutusunun ekran görüntüsü.

  1. Azure DevOps proje sayfanızda Proje ayarları'nı seçin.

  2. Proje Ayarları'ndanİşlem Hatları>Hizmeti bağlantıları'nı seçin.

  3. Hizmet bağlantıları sayfasında Yeni hizmet bağlantısı'nı veya bu hizmet bağlantısı projedeki ilk hizmet bağlantısıysa Hizmet bağlantısı oluştur'u seçin.

    Proje panosundaki proje ayarları düğmesinin ekran görüntüsü.

  4. Yeni hizmet bağlantısı ekranında Azure Resource Manager'ı ve ardından İleri'yi seçin.

    Azure Resource Manager seçimini gösteren ekran görüntüsü.

  5. Hizmet sorumlusu (el ile) öğesini ve ardından İleri'yi seçin.

    Hizmet sorumlusu (el ile) kimlik doğrulama yöntemi seçimini gösteren ekran görüntüsü.

  6. Yeni Azure hizmeti bağlantısı ekranında aşağıdaki alanları doldurun:

    • Ortam: Azure Bulut'a tıklayın.
    • Kapsam Düzeyi: Abonelik'i seçin.
    • Abonelik Kimliği: Azure abonelik kimliğinizi girin.
    • Abonelik Adı: Azure aboneliğinizin adını girin.
  7. Kimlik Doğrulaması bölümünde aşağıdaki alanları doldurun:

    • Hizmet Sorumlusu Kimliği: Komutun appId döndürdiği az ad sp create-for-rbac değeri girin.
    • Kimlik bilgisi: Hizmet sorumlusu anahtarını seçin.
    • Hizmet sorumlusu anahtarı: komutu tarafından password döndürülen değeri girinaz ad sp create-for-rbac.
    • Kiracı Kimliği: komutu tarafından tenant döndürülen değeri girinaz ad sp create-for-rbac.
    • Bağlantıyı doğrulamak için Doğrula'yı seçin.
  8. Ayrıntılar bölümünde, Hizmet Bağlantısı Adı'nın altında hizmet bağlantısı için bir ad girin.

  9. Tüm işlem hatlarına erişim izinleri ver onay kutusunu seçin.

  10. Doğrula ve kaydet'i seçin.

    Yeni hizmet bağlantısı ekranının üst kısmının ekran görüntüsü.

Yeni bağlantı Hizmet bağlantıları listesinde görünür ve işlem hattınızda kullanılmaya hazırdır.

İşlem hattı oluşturma

Python web uygulamanızı derlemek ve Azure Uygulaması Service'e dağıtmak için bir işlem hattı oluşturun.

  1. Projenizin sol gezinti menüsünde İşlem hatları'nı seçin.

  2. İşlem Hatları sayfasında Yeni işlem hattı'nı veya bu işlem hattı projenin ilk işlem hattıysa işlem hattı oluştur'u seçin.

    İşlem hatları listesindeki yeni işlem hattı düğmesinin ekran görüntüsü.

  3. Kodunuz nerede ekranında GitHub'ı seçin. GitHub'da oturum açmanız istenebilir.

    Kodunuzun konumu olarak GitHub'ı seçme işleminin ekran görüntüsü.

  4. Depo seçme ekranında, çatalladığınız örnek deposunu seçin. GitHub, GitHub parolanızı yeniden girmenizi veya Azure Pipelines GitHub uygulamasını yüklemenizi isteyebilir. Uygulamayı yüklemek için ekrandaki yönergeleri izleyin. Daha fazla bilgi için bkz. GitHub uygulama kimlik doğrulaması.

    Depo seçiminin ekran görüntüsü.

  5. İşlem hattınızı yapılandırın sayfasında Azure'da Python'ı Linux Web App'e seçin.

  6. Sonraki ekranda Azure aboneliğinizi seçin ve Devam'ı seçin.

  7. Sonraki ekranda Azure web uygulamanızı 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 hattı düzenleyicisinde görüntüler.

  1. Projenizin sol gezinti menüsünde İşlem hatları'nı seçin.

  2. İşlem Hatları sayfasında Yeni işlem hattı'nı veya bu işlem hattı projenin ilk işlem hattıysa işlem hattı oluştur'u seçin.

    İşlem hatları listesindeki yeni işlem hattı düğmesinin ekran görüntüsü.

  3. Kodunuz nerede sayfasında GitHub Enterprise Server'ı seçin. GitHub'da oturum açmanız istenebilir.

    Kodunuzun konumu olarak GitHub'ı seçme işleminin ekran görüntüsü.

  4. Depo seçin sekmesinde, çatallanmış örnek deponuzu seçin. GitHub, GitHub parolanızı yeniden girmenizi veya Azure Pipelines GitHub uzantısını veya uygulamasını yüklemenizi isteyebilir. Uygulamayı yüklemek için ekrandaki yönergeleri izleyin. Daha fazla bilgi için bkz. GitHub depolarına erişim.

    Depo seçiminin ekran görüntüsü.

  5. İşlem hattınızı yapılandırın sayfasında Başlangıç işlem hattı'nı seçin.

  6. İşlem hattı YAML'nizi gözden geçirin sayfasında, starter azure-pipelines.yml dosyasının içeriğini aşağıdaki YAML işlem hattı dosyasıyla değiştirin. YAML dosyasında:

    • <your-service-connection-name> ve <your-web-app-name> yer tutucularını kendi değerlerinizle değiştirin.

    • değerini <your-pool-name> kullanmak istediğiniz aracı havuzunun adıyla, değerini ise aracınızda çalışan Python sürümüyle değiştirin <your-python-version> . Bu sürüm, komutun runtime_version JSON çıkışıyla az webapp up eşleşmelidir.

YAML işlem hattı dosyası

İşlem hattı YAML'nizi gözden geçirin sayfasında işlem hattına bakarak ne yaptığını görün. Tüm varsayılan girişlerin kodunuz için uygun olduğundan emin olun. İşlem hattı YAML dosya şeması hakkında bilgi edinmek için YAML şema başvurusuna bakın.

Aşağıdaki tam örnek YAML işlem hattı dosyası, CI/CD işlem hattınızı aşamalar,işler ve adımlar dizisi olarak tanımlar ve burada her adım farklı görevler ve betikler için ayrıntıları içerir. Oluşturulan YAML kodu, yer tutucuları otomatik olarak uygulamanız ve bağlantınız için değerlerle doldurur.

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
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'

Değişkenler

variables YAML dosyasının başındaki bölüm aşağıdaki değişkenleri tanımlar:

Değişken Açıklama
azureServiceConnectionId Azure Resource Manager hizmet bağlantısının kimliği.
webAppName App Service web uygulamasının adı.
vmImageName Derleme aracısı için kullanılacak işletim sisteminin adı.
environmentName Dağıtım işi çalıştırıldığında otomatik olarak oluşturulan, dağıtılacak ortamın adı.
projectRoot Uygulama kodunu içeren kök klasör.
pythonVersion Derleme ve dağıtım aracılarında kullanılacak Python sürümü.
Değişken Açıklama
azureServiceConnectionId Azure Resource Manager hizmet bağlantısının kimliği.
webAppName App Service web uygulamasının adı.
environmentName Dağıtım işi çalıştırıldığında otomatik olarak oluşturulan, dağıtılacak 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 ve dağıtım aşamaları

İşlem hattı derleme ve dağıtım aşamalarından oluşur.

Oluşturma aşaması

Derleme aşaması, değişkeninde vmImageName tanımlanan işletim sisteminde çalışan tek bir iş içerir. Bu durumda ubuntu-latest.

  - job: BuildJob
    pool:
      vmImage: $(vmImageName)

Derleme aşaması, parametresi tarafından pool tanımlanan içindeki name 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 kullanabilirsiniz demands: Agent.Name -equals <agent-name>.

  - job: BuildJob
    pool:
      name: <your-pool-name>
      demands: python

İş birden çok adım içerir:

  1. İlk olarak UsePythonVersion görevi, değişkende pythonVersion tanımlandığı gibi kullanılacak Python sürümünü seçer.

       - task: UsePythonVersion@0
          inputs:
            versionSpec: '$(pythonVersion)'
            displayName: 'Use Python $(pythonVersion)'
    
  2. Sonraki adım, sanal python ortamı oluşturan ve uygulamasının bağımlılıklarını 'den requirements.txtyükleyen bir betik kullanır. workingDirectory parametresi, 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"
    
  3. ArchiveFiles görevi, yerleşik web uygulamasını içeren bir ZIP arşivi oluşturur.

        - task: ArchiveFiles@2
          displayName: 'Archive files'
          inputs:
            rootFolderOrFile: '$(projectRoot)'
            includeRootFolder: false
            archiveType: zip
            archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
            replaceExistingArchive: true
    

    Parametreler aşağıdaki gibi ayarlanır:

    Parametre Açıklama
    rootFolderOrFile Uygulama kodunun konumu.
    includeRootFolder Kök klasörün.zip dosyasına eklenip eklenmeyeceği. false olarak ayarlayın. olarak ayarlanırsa true ,.zip dosyasının içeriği s adlı bir klasöre konur ve görev 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.
  4. Dosya .zip daha sonra adlı dropbir yapıt olarak işlem hattına yüklenir. Dağıtım aşaması, uygulamayı dağıtmak için .zip dosyasını kullanır.

        - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
          displayName: 'Upload package'
          artifact: drop
    
    • parametresi, upload karşıya yüklenecek .zip dosyasının konumunu ve adını ayarlar.
    • parametresi, artifact oluşturulan yapıtın adını olarak dropayarlar.

Dağıtım aşaması

Derleme aşaması başarıyla tamamlanırsa dağıtım aşaması çalışır. dependsOn ve condition anahtar sözcükleri bu davranışı tanımlar.

  dependsOn: Build
  condition: succeeded()

Dağıtım aşaması, aşağıdaki gibi yapılandırılan tek bir dağıtım işi içerir.

  - deployment: DeploymentJob
    pool:
      vmImage: $(vmImageName)
    environment: $(environmentName)
  • deployment anahtar sözcüğü, işin dağıtılacak ortamı hedefleyen bir dağıtım işi olduğunu gösterir. environment, iş çalıştırıldığında projenizde otomatik olarak oluşturulur.

  • pool parametresi dağıtım aracısı havuzunu belirtir ve belirtilmezse name varsayılan aracı havuzunu kullanır. Aracı, bu durumda vmImageNamedeğişkeninde ubuntu-latest tanımlanan işletim sisteminde çalışır.

  - deployment: DeploymentJob
    pool:
      name: <your-pool-name>
    environment: $(environmentName)
  • deployment anahtar sözcüğü, işin dağıtılacak ortamı hedefleyen bir dağıtım işi olduğunu gösterir. environment, iş çalıştırıldığında projenizde otomatik olarak oluşturulur.

  • pool parametresi dağıtım aracısı havuzunu belirtir ve işlem hattında belirtilen Python sürümünü çalıştırma özelliğine sahip bir aracı içermelidir.

strategy anahtar sözcüğü dağıtım stratejisini tanımlar.

  strategy:
    runOnce:
      deploy:
        steps:
  • 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 öğesini belirtirsteps.

steps bu aşamada aşağıdaki görevleri çalıştırın:

  1. UsePythonVersion@0 , Derleme aşamasında olduğu gibi kullanılacak Python sürümünü seçer.
  2. AzureWebApp@1 web uygulamasını ve ZIP yapıtını drop 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
  • parametresi, azureSubscription işlem hattı değişkenlerinde belirtilen değerini içerir azureServiceConnectionId .
  • appName değişkeninin webAppName değerini içerir.
  • , package dağıtılacak .zip dosyasının adını ve konumunu belirtir.

Ayrıca python-vscode-flask-tutorial deposu startup.txtadlı bir dosyada uygulama başlatma komutunu içerdiğinden, parametresini ekleyerek uygulama başlatma komutunu belirtebilirsiniz: startUpCommand: 'startup.txt'.

İşlem hattını çalıştırma

Artık işlem hattını denemeye hazırsınız.

  1. İşlem hattı düzenleyicisinde Kaydet ve çalıştır'ı seçin.

  2. Kaydet ve çalıştır ekranında, isterseniz bir işleme iletisi ekleyin ve kaydet ve çalıştır'ı seçin.

    İşlem hattı Özet sayfasında Aşamalar veya İşler'i seçerek işlem hattının çalışmasını izleyebilirsiniz. Her iş ve aşama başarıyla tamamlandıktan sonra yeşil bir onay işareti görüntüler. Hatalar oluşursa, bunlar özette veya iş adımlarında görünür.

    İşlem hattı çalıştırma özet aşamaları bölümünün ekran görüntüsü.

    Ö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.

    Derleme raporundan işlem hattı açıklamasını düzenleme ekran görüntüsü.

  3. Dağıtım işinden Azure Web App'i Dağıt görevini seçerek çıktısını görüntüleyin.

    İşlem hattı aşaması adımlarının ekran görüntüsü.

  4. Çıktıdan App Service Uygulaması URL'sinden sonra URL'yi seçin. Uygulama aşağıdaki gibi görünmelidir:

    App Service'te çalışan örnek uygulamanın görünümünün ekran görüntüsü.

Not

Eksik bağımlılık nedeniyle bir uygulama dağıtımı başarısız olursa ,requirements.txt dosyası dağıtım sırasında işlenmez. Web uygulamasını komutunu kullanmak az webapp up yerine doğrudan portalda oluşturursanız bu sorun oluşabilir.

komutu özellikle az webapp up derleme eylemini SCM_DO_BUILD_DURING_DEPLOYMENT olarak trueayarlar. Portal aracılığıyla bir uygulama hizmeti sunarsanız, bu eylem otomatik olarak ayarlanmadı.

Bu eylemi ayarlamak için:

  1. Web uygulamanızın portal sayfasında sol gezinti menüsünden Yapılandırma'yı seçin.
  2. Uygulama Ayarları sekmesinde Yeni Uygulama Ayarı'nı seçin.
  3. Açılan pencerede , AdSCM_DO_BUILD_DURING_DEPLOYMENTolarak ayarlayın, Değertrueolarak ayarlayın ve Tamam'ı seçin.
  4. Yapılandırma sayfasının üst kısmındaki Kaydet'i seçin.
  5. İşlem hattını yeniden çalıştırın. Bağımlılıklar artık dağıtım sırasında yüklenmelidir.

İşlem hattı çalıştırmasını tetikleme

Bu işlem hattı, kod deposunda yapılan bir değişiklik her iade edildiğinde çalışacak şekilde ayarlanır. İş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.

  1. Uygulamanızın GitHub deposuna gidin.
  2. Kodda, örneğin uygulamanın başlığını değiştirme gibi bir değişiklik yapın.
  3. Değişikliği işleyin.
  4. İşlem hattınıza gidin ve yeni bir çalıştırmanın oluşturulduğunu ve çalıştığını doğrulayın.
  5. Çalıştırma tamamlandığında, değişikliğin web uygulamanıza dağıtıldığını doğrulayın.
  6. Azure portalında web uygulamanıza gidin ve sol gezinti menüsünden Dağıtım Merkezi'ni seçin.
  7. Günlükler sekmesini seçin ve yeni dağıtımın listelendiğini doğrulayın.

Django uygulamalarını App Service'e dağıtma

Ayrı bir veritabanı kullanıyorsanız Django uygulamalarını Linux üzerinde App Service'e 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ış veritabanlarını etkilemez.

Kapsayıcı başlatma işleminde açıklandığı gibi App Service, uygulama kodunuzda genellikle uygulama nesnesini içeren bir wsgi.py dosyasını otomatik olarak arar. Başlangıç komutunu özelleştirmek istiyorsanız YAML işlem hattı dosyanızın adımındaki startUpCommand parametresini kullanınAzureWebApp@1.

Django kullandığınızda, genellikle uygulama kodunu dağıtdıktan sonra kullanarak manage.py migrate veri modellerini 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 test sanal ortamını 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. Testleri çalıştırma.

Kaynakları temizleme

Bu öğreticide oluşturduğunuz Azure kaynaklarıyla işiniz bittiyse, daha fazla ücret tahsil edilmemesi için bunları silin.

  • Oluşturduğunuz Azure DevOps projesini 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 dosya sistemini koruyan Azure depolama hesabını silin. Cloud Shell'i kapatın, ardından cloud-shell-storage- ile başlayan kaynak grubunu bulun. Kaynak grubunu sil'i seçin ve istemleri izleyin.