Bir ortamda Linux VM'lerine dağıtın

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Sanal makineleri Azure Pipelines ortamlarına kaynak olarak ekleyebilir ve dağıtımlar için hedefleyebilirsiniz. Sürekli tümleştirme ve sürekli dağıtım (CI/CD) iş akışı için, ortamın dağıtım geçmişi her VM için tetikleme işlemesine kadar izlenebilirlik sağlar.

Bu makalede, bir ortamdaki birden çok Linux sanal makinesi (VM) kaynağına dağıtımlar için Bir Azure DevOps işlem hattının nasıl ayarlanacağı gösterilmektedir. Bu yönergeler bir JavaScript veya Java uygulaması derleyip dağıtır, ancak bunları web dağıtım paketi yayımlayan tüm uygulamalar için uyarlayabilirsiniz.

Dağıtım işi tarafından hedeflenen ortamlar ve kaynaklar hakkında daha fazla bilgi için jobs.deployment.environment YAML şema tanımına bakın. Dağıtım işleri hakkında daha fazla bilgi için jobs.deployment tanımına bakın.

Önkoşullar

Ayrıca JavaScript veya Node.js uygulamaları için:

Önemli

  • Uygulamaları dağıtmak için hedef ortam VM kaynaklarının tüm gerekli yazılımlara, bağımlılıklara, izinlere ve oturum açma bilgilerine yüklenmiş ve yapılandırılmış olması gerekir.
  • GitHub kaynak kodunu kullanmak için bir GitHub hizmet bağlantısına ihtiyacınız vardır. GitHub ayrıca oturum açmanızı, Azure Pipelines GitHub uygulamasını yüklemenizi veya Azure Pipelines'ı yetkilendirmenizi isteyebilir. Her işlemi tamamlamak için ekrandaki yönergeleri izleyin. Daha fazla bilgi için bkz . GitHub depolarına erişim.

Ortam oluşturma ve Linux VM'leri ekleme

Azure Pipelines projenizde bir ortam oluşturun ve Ortam oluşturma ve VM ekleme başlığı altındaki yönergeleri izleyerek Linux VM'lerinizi ortam kaynakları olarak ekleyin.

Kopyalanan aracı kayıt betiğini her VM'de çalıştırarak ortama kaydedin. Etkileşimli istemleri yanıtlayarak tek tek VM'lere etiketler de atayabilirsiniz.

Derleme işlem hattını oluşturma ve çalıştırma

Kod deponuzun main dalına bir işleme yapıldığında uygulamanızı derleyip yayımlayan bir CI işlem hattı oluşturun.

YAML işlem hattını oluşturma

  1. Azure DevOps projenizde İşlem Hatları>Yeni işlem hattı veya İşlem Hattı Oluştur'u ve ardından kaynak kodunuzun konumu olarak GitHub'ı seçin.
  2. Depo Seç ekranında, çatalladığınız örnek deponuzu seçin.
  3. İşlem hattınızı yapılandırın ekranında Başlatıcı işlem hattı'nı seçin.
  4. İşlem hattı YAML'nizi gözden geçirin ekranında, çalışma zamanınıza bağlı olarak oluşturulan başlangıç kodunu aşağıdaki kodla değiştirin.

Derleme işini ekle

Build görevleri projenizi derlemek ve test etmek için çalışır ve derleme çıktısını bir drop konumuna yükler. Bu iş, Linux ortamı VM'lerinizde değil, işlem hattındapool belirtilen oluşturma aracılarında çalışır.

Aşağıdaki işlem hattı, Node.js tabanlı uygulamanızı npm ile derleyip test eder, ardından çıkışı paketler ve bir hedef konumuna yükler.

trigger:
- main

pool:
  vmImage: ubuntu-latest

jobs:  
- job: Build
  displayName: Build
  steps:
  - task: UseNode@1
    inputs:
      version: '16.x'
    displayName: 'Install Node.js'
  - script: |
      npm install
      npm run build --if-present
      npm run test --if-present
    displayName: 'npm install, build and test'
  - task: ArchiveFiles@2
    displayName: 'Archive files'
    inputs:
      rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
      includeRootFolder: false
      archiveType: tar
      tarCompression: gz
      archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).gz
      replaceExistingArchive: true
  - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).gz
    artifact: drop

Daha fazla bilgi için Gulp ile Node.js uygulamanızı derleme bölümünde derleme oluşturma adımlarını gözden geçirin.

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

azure-pipelines.yml dosyanızı deponuza kaydetmek ve CI/CD işlem hattını başlatmak için Kaydet ve çalıştır'ı ve ardından Kaydet ve yeniden çalıştır'ı seçin.

İşlem hattı tamamlandığında, derleme işinin başarıyla çalıştırıldığını ve yayımlanan 1 yapıtın İlgili altında göründüğünü doğrulamak için iş Özeti sayfasını görüntüleyin.

Dağıtım işini ekleyin ve çalıştırın

Dağıtım işipreDeploy, deploy, routeTraffic ve postRouteTraffic yaşam döngüsü kancalarını bir kez yürütür ve sonra ya on: success ya da on: failure yürütür. Ortam VM'lerine dağıtırsanız, preDeploy aşama ortam VM'lerinde değil derleme aracısında çalışır. Diğer tüm adımlar ortamdaki kayıtlı VM'lerde çalıştırılır.

  1. İsteğe bağlı preDeploy adım dağıtımdan önce çalışır. Orkestrasyon, VM ve artefakt hazırlama ve sağlık kontrolleri için bu adımı kullanabilirsiniz.
  2. Bu deploy adım, dağıtım nesnesini hedef ortam VM'lerine dağıtır.
  3. İsteğe bağlı routeTraffic adım trafik yönlendirmesi yapabilir.
  4. İsteğe bağlı postRouteTraffic adım sistem durumu denetimleri ve bildirimler yapabilir.
  5. Özel on.failure ve on.success adımlar bildirim veya kurtarma sağlayabilir.

Ile resourceType: VirtualMachine bir ortama dağıtım işi, ortam VM'lerinin Bash veya Azure CLI gibi tüm işlem hattı görevlerini çalıştırabilmesini gerektirir. Hedef VM'lere preDeploy gerekli yazılımları ve izinleri yüklemek için bu adımı kullanabilirsiniz.

Örneğin, bir dağıtım adımıNda Azure CLI kullanılıyorsa aracı VM'lerde Azure CLI yüklü olmalı ve aracı kullanıcı için PATH'de kullanılabilir olmalıdır. Aracı kullanıcısının CLI'yi çalıştırma iznine sahip olması ve Azure'da kimlik doğrulaması yapması gerekir. Aracı kullanıcısını sudoers'a eklemeniz veya yüklemeyi otomatikleştirmek için ortam değişkenlerini ayarlamanız gerekebilir.

Azure CLI'yi hedef VM'lere yüklemek için bir preDeploy betik kullanabilirsiniz. Azure'da kimlik doğrulaması yapmak için az login çalıştırabilir veya otomasyon için bir hizmet temsili tanımlayarak bir az login --service-principal adımında preDeploy çalıştırabilirsiniz.

Dağıtım işini ekleme

Aşağıdaki örnek dağıtım işi, Build işi başarıyla tamamlandığında başlar. İşi işlem hattınıza eklemek için:

  1. Özet sayfasının sağ üst kısmındaki Diğer eylemler simgesini seçin, İşlem hattını düzenle'yi seçin ve işlem hattınızın sonuna aşağıdaki kodu ekleyin. <environment-name> ifadesini oluşturduğunuz ortamın adıyla değiştirin.

    İsteğe bağlı olarak, tags parametresini kullanarak ve <VMtag> belirterek, VM'ler için tanımladığınız, ortamdan belirli VM'leri dağıtımı almak üzere seçebilirsiniz.

    - deployment: VMDeploy
      displayName: Web deploy
      dependsOn: Build
      condition: succeeded()
      environment:
        name: <environment-name>
        resourceType: VirtualMachine
        tags: <VMtag> # VMs to deploy to
    
  2. İşe bir strategydeployment ekleyin. runOnce dağıtım stratejisi en basittir ve belirtmezseniz strategyvarsayılan olarak çalışır. Bu strateji, herhangi bir paralellik veya trafik yönetimi olmadan ortamdaki her VM'de dağıtım adımlarını bir kez yürütür.

      strategy:
         runOnce:
           deploy:
              steps:
              - script: echo my first deployment
    
  3. Dağıtım işini ekledikten sonra Doğrula ve kaydet'i, ardından Kaydet'i, Çalıştır'ı ve sonra yeniden Çalıştır'ı seçin. Bu iş her çalıştırıldığında, dağıtım geçmişi ortamda kayıt altına alınır.

    Not

    Ortamı kullanan işlem hattını ilk kez çalıştırdığınızda, aracı havuzuna ve ortama erişmek için işlem hattının tüm çalıştırmaları için izin vermelisiniz. İşlem hattı çalıştırma özeti ekranında işin yanındaki Bekleme simgesini seçin ve ardından gerekli izinleri vermek için İzin Ver'i seçin.

Sıralı dağıtım stratejisi

rolling stratejisini runOnce dağıtım stratejisi yerine kullanabilirsiniz. Sıralı dağıtım stratejisi paralelliği, sistem durumu denetimlerini ve trafik yönlendirmeyi düzenleyebilir. runOnce Strateji aynı anda tek bir VM'de yürütülürken, sıralı dağıtım, ayara bağlı olarak beşe kadar hedef VM'nin sıralı kümelerinde paralel olarak maxParallel çalıştırılabilir.

maxParallel parametresi, kullanılabilir kalması gereken VM'lerin sayısını veya yüzdesini ayarlayarak uygulamanın istekleri işleyebilmesini sağlar ve dağıtımlar sırasında genel kapalı kalma süresini azaltır. Bu parametre ayrıca dağıtımın başarı ve başarısızlık koşullarını da belirler.

Sıralı dağıtım stratejisi hakkında daha fazla bilgi için bkz . jobs.deployment.strategy.rolling şema tanımı.

Dağıtım işi örneği

VM kaynaklarına yapılan dağıtımlar, VM'lerin tüm gerekli uygulamaların, bağımlılıkların ve izinlerin yüklü ve yapılandırılmış olmasını gerektirir. Bu gereksinimleri el ile önceden yüklemeniz veya işlem hattının bunları yüklemesi veya uygulaması gerekir.

Vm kaynaklarına Java uygulaması dağıtımı, kendi içinde olduğundan daha kolaydır. Java Sanal Makinesi (JVM) genellikle VM aracılarına önceden yüklenmiştir ve uygulama bağımlılıkları, izinler veya paket yönetimi konusunda endişelenmeniz gerekmez. JAR dosyasını indirip ardından java -jar ile çalıştırabilirsiniz.

Node.js uygulaması, Node, olasılıkla npm bağımlılıkları ve systemd gibi bir hizmet yöneticisinin her aracı VM'de bulunmalı ve yapılandırılmış olmasını gerektirir. İşlem hattı dağıtım betiğinin otomatik hale getirmek için etkileşimsiz olması ve uygulamanın hizmetini yeniden başlatabilmesi ve yönetebilmesi gerekir.

JavaScript uygulaması için aşağıdaki YAML rolling dağıtım işi, aşamanın başarıyla Build tamamlanmasına bağlıdır. Dağıtım işi, aşağıdaki gereksinimlerin her aracı VM'ye önceden yüklenmiş veya önceden yapılandırılmış olduğunu varsayar. Tam otomasyon için bu uygulamaları ve hizmetleri işlem hattının bir parçası olarak VM'lere yükleyebilir ve yapılandırabilirsiniz.

  • Node.js 16.x yüklüdür ve derleme aracısının PATH'sinde npm kullanılabilir.
  • Hizmeti başlatan Node.js uygulaması için /etc/systemd/system/pipelines-javascript.service gibi bir systemd hizmet dosyası ile yapılandırılmış systemd.
  • Gerekli komutlar için aracıdırıcı kullanıcıya şifresiz sudo erişimi vermek amacıyla NOPASSWD: dosyasında ile ayarlayın.
  • Aracı kullanıcısının /opt/pipelines-javascript veya diğer dağıtım hedefine yazma izinleri.

Tavsiye

Çoğu Node.js uygulaması için dağıtım işleri yerine, Azure App Service'e dağıtmayı veya Microsoft tarafından barındırılan aracılarla normal işlem hattı işleri kullanmayı düşünün. Bu yaklaşım daha basittir ve VM ortamlarını yönetmenin operasyonel yükünü önler. Belirli VM kaynaklarına dağıtım, VM sunucularının, gelişmiş düzenlemenin veya eski altyapının doğrudan denetlenmesi gereken senaryolar için idealdir.

- stage: Deploy
  displayName: Rolling Deploy to VMs
  dependsOn: Build
  condition: succeeded()
  jobs:
  - deployment: RollingDeploy
    displayName: Rolling deploy to Ubuntu VMs
    environment:
      name: <environment-name>
      resourceType: VirtualMachine
    strategy:
      rolling:
        maxParallel: 1   #or 2 for parallel. For percentages, use x%
        preDeploy:
          steps:
          - download: current
            artifact: drop
          - script: echo "Pre-deploy on $(hostname)"
        deploy:
          steps:
          - script: |
              echo "Unpacking Node.js app on $(hostname)"
              sudo mkdir -p /opt/pipelines-javascript
              sudo tar -xzf $(Pipeline.Workspace)/drop/$(Build.BuildId).tar.gz -C /opt/pipelines-javascript --strip-components=1
              cd /opt/pipelines-javascript
              echo "Installing production dependencies"
              sudo npm ci --only=production
              echo "Restarting Node.js service"
              sudo systemctl restart pipelines-javascript
            displayName: 'Extract, install, and restart Node.js service'
        routeTraffic:
          steps:
          - script: echo "Routing traffic on $(hostname)"
        postRouteTraffic:
          steps:
          - script: echo "Post-route health check on $(hostname)"
        on:
          failure:
            steps:
            - script: echo "Deployment failed on $(hostname)"
          success:
            steps:
            - script: echo "Deployment succeeded on $(hostname)"

Ortamdaki işlem hattı izlenebilirliğine ulaşım sağlama

Ortam Dağıtımları sekmesi, işlemelerin ve iş öğelerinin tam izlenebilirliğini ve ortam için işlem hatları arası dağıtım geçmişini sağlar.

Dağıtımlar görünümünün ekran görüntüsü.