Bagikan melalui


Melakukan penyebaran ke VM Linux di lingkungan

Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

Anda dapat menambahkan komputer virtual sebagai sumber daya dalam lingkungan Azure Pipelines dan menargetkannya untuk penyebaran. Untuk alur kerja integrasi berkelanjutan dan penyebaran berkelanjutan (CI/CD), riwayat penyebaran lingkungan menyediakan keterlacakan untuk setiap VM hingga ke commit pemicu.

Artikel ini memperlihatkan kepada Anda cara menyiapkan alur Azure DevOps untuk penyebaran ke beberapa sumber daya komputer virtual (VM) Linux di lingkungan. Instruksi ini membangun dan menyebarkan aplikasi JavaScript atau Java, tetapi Anda dapat menyesuaikannya untuk aplikasi apa pun yang menerbitkan paket penyebaran web.

Untuk informasi selengkapnya tentang lingkungan dan sumber daya yang ditargetkan oleh pekerjaan penyebaran, lihat definisi skema YAML jobs.deployment.environment . Untuk informasi lebih lanjut tentang pekerjaan penyebaran, lihat definisi jobs.deployment.

Prasyarat

Selain itu, untuk Aplikasi JavaScript atau Node.js:

Penting

  • Untuk menyebarkan aplikasi, sumber daya VM lingkungan target harus memiliki semua perangkat lunak, dependensi, izin, dan login yang diperlukan yang diinstal dan dikonfigurasi.
  • Untuk menggunakan kode sumber GitHub, Anda memerlukan koneksi layanan GitHub. GitHub mungkin juga meminta Anda untuk masuk, menginstal aplikasi Azure Pipelines GitHub, atau mengotorisasi Azure Pipelines. Untuk menyelesaikan setiap proses, ikuti instruksi di layar. Untuk informasi selengkapnya, lihat Akses ke repositori GitHub.

Membuat lingkungan dan menambahkan VM Linux

Dalam proyek Azure Pipelines Anda, buat lingkungan dan tambahkan VM Linux Anda sebagai sumber daya lingkungan dengan mengikuti instruksi di Membuat lingkungan dan menambahkan VM.

Jalankan skrip pendaftaran agen yang disalin pada setiap VM untuk mendaftarkannya di lingkungan. Anda juga dapat menetapkan tag ke masing-masing VM dengan merespons perintah interaktif.

Membuat dan menjalankan alur build

Buat alur CI yang membangun ulang dan menyebarkan aplikasi Anda setiap kali ada commit ke cabang main pada repositori kode Anda.

Membuat alur YAML

  1. Di proyek Azure DevOps Anda, pilih Alur Baru> atau Buat Alur, lalu pilih GitHub sebagai lokasi kode sumber Anda.
  2. Pada layar Pilih repositori, pilih repositori sampel fork Anda.
  3. Pada layar Konfigurasikan alur Anda, pilih Alur pemula.
  4. Pada layar Tinjau YAML pipeline Anda, ganti kode pemula yang dihasilkan dengan kode berikut, tergantung pada runtime Anda.

Tambahkan tugas build

Job Build menjalankan tugas untuk membangun dan menguji proyek Anda, dan mengunggah hasil build ke lokasi drop. Pekerjaan ini berjalan pada agen build yang ditentukan dalam alur pool, bukan pada VM lingkungan Linux Anda.

Alur berikut membangun dan menguji proyek Node.js Anda dengan npm, lalu mengemas output dan mengunggahnya ke lokasi drop.

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

Untuk informasi selengkapnya, tinjau langkah-langkah untuk membuat build di Membangun aplikasi Node.js Anda dengan gulp.

Menjalankan rangkaian proses

Untuk menyimpan file azure-pipelines.yml Anda ke repositori Anda dan memulai alur CI/CD, pilih Simpan dan jalankan, lalu pilih Simpan dan jalankan lagi.

Setelah alur selesai, lihat halaman Ringkasan pekerjaan untuk memverifikasi bahwa pekerjaan pembangun berhasil dijalankan dan 1 artefak yang diterbitkan muncul di bawah Terkait.

Tambahkan dan jalankan pekerjaan penyebaran

Pekerjaan penyebaran mengeksekusi preDeploykait siklus hidup , deploy, routeTraffic, dan postRouteTraffic sekali, dan kemudian menjalankan baik on: success atau on: failure. Jika Anda menyebarkan ke lingkungan VM, fase preDeploy berjalan pada agen build, bukan pada VM lingkungan. Semua langkah lain berjalan pada VM terdaftar di lingkungan.

  1. Langkah opsional preDeploy berjalan sebelum penyebaran. Anda dapat menggunakan langkah ini untuk orkestrasi, persiapan VM dan artefak, dan pemeriksaan kesehatan.
  2. Langkah ini deploy mengimplementasikan objek penggelaran ke VM lingkungan target.
  3. Langkah opsional routeTraffic dapat menerapkan pengalihan lalu lintas.
  4. Langkah opsional postRouteTraffic dapat melakukan pemeriksaan kesehatan dan pemberitahuan.
  5. on.failure Langkah kustom dan on.success langkah dapat memberikan pemberitahuan atau pemulihan.

Pekerjaan penyebaran ke lingkungan dengan resourceType: VirtualMachine mengharuskan VM lingkungan dapat menjalankan semua tugas rangkaian, seperti Bash atau Azure CLI. Anda dapat menggunakan preDeploy langkah untuk menginstal perangkat lunak dan izin yang diperlukan pada VM target.

Misalnya, jika langkah penyebaran menggunakan Azure CLI, agen VM harus menginstal Azure CLI dan tersedia di PATH untuk pengguna agen. Pengguna agen harus memiliki izin untuk menjalankan CLI dan harus mengautentikasi ke Azure. Anda mungkin perlu menambahkan pengguna agen ke sudoers, atau menyiapkan variabel lingkungan untuk mengotomatiskan penginstalan.

Anda dapat menggunakan preDeploy skrip untuk menginstal Azure CLI pada VM target. Untuk mengautentikasi ke Azure, Anda dapat menjalankan az login, atau untuk otomatisasi, tentukan prinsipal layanan dan jalankan az login --service-principal dalam langkah preDeploy.

Tambah pekerjaan penyebaran

Pekerjaan penerapan berikut akan dimulai ketika pekerjaan Build berhasil diselesaikan dengan sukses. Untuk menambahkan tugas ke pipeline Anda:

  1. Pilih ikon Tindakan lainnya di kanan atas pada halaman Ringkasan , pilih Edit alur, dan tambahkan kode berikut ke akhir alur Anda. Ganti <environment-name> dengan nama lingkungan yang Anda buat.

    Secara opsional, Anda dapat memilih VM tertentu dari lingkungan untuk menerima penyebaran dengan menggunakan parameter tags dan menentukan parameter <VMtag> yang telah Anda tentukan untuk VM.

    - deployment: VMDeploy
      displayName: Web deploy
      dependsOn: Build
      condition: succeeded()
      environment:
        name: <environment-name>
        resourceType: VirtualMachine
        tags: <VMtag> # VMs to deploy to
    
  2. Tambahkan sebuah strategy pada pekerjaan deployment. Strategi penyebaran runOnce adalah yang paling sederhana dan berjalan secara default jika Anda tidak menentukan strategy. Strategi ini menjalankan langkah-langkah penyebaran sekali pada setiap VM di lingkungan, tanpa paralelisme atau manajemen lalu lintas.

      strategy:
         runOnce:
           deploy:
              steps:
              - script: echo my first deployment
    
  3. Setelah Anda menambahkan pekerjaan penyebaran, pilih Validasi dan simpan, lalu pilih Simpan, pilih Jalankan, dan pilih Jalankan lagi. Dengan setiap eksekusi pekerjaan ini, mencatat riwayat penyebaran terhadap lingkungan.

    Catatan

    Pertama kali Anda menjalankan alur yang menggunakan lingkungan, Anda harus memberikan izin untuk semua eksekusi alur untuk mengakses kumpulan agen dan lingkungan. Pilih simbol Menunggu di samping pekerjaan pada layar Ringkasan eksekusi alur, lalu pilih Izinkan untuk memberikan izin yang diperlukan.

Strategi penyebaran bergulir

Anda dapat menggunakan rolling alih-alih strategi penyebaran runOnce. Strategi penyebaran bergulir dapat mengatur paralelisme, pemeriksaan kesehatan, dan perutean lalu lintas. Meskipun strategi ini dieksekusi pada satu VM dalam satu waktu, penyebaran bergulir dapat berjalan secara paralel dalam set bergulir hingga lima VM target, tergantung pada pengaturan.

Parameter maxParallel menetapkan jumlah atau persentase VM yang harus tetap tersedia, memastikan bahwa aplikasi dapat menangani permintaan dan mengurangi waktu henti keseluruhan selama penyebaran. Parameter ini juga menentukan kondisi keberhasilan dan kegagalan untuk penyebaran.

Untuk informasi selengkapnya tentang strategi penyebaran bergulir, lihat definisi skema jobs.deployment.strategy.rolling .

Contoh tugas penyebaran

Penyebaran ke sumber daya VM mengharuskan VM untuk memiliki semua aplikasi, dependensi, dan izin yang diperlukan, yang telah diinstal dan terkonfigurasi. Anda harus menginstal persyaratan ini secara manual, atau alur harus menginstal atau mengimplementasikannya.

Penyebaran aplikasi Java ke sumber daya VM lebih mudah diterapkan karena mandiri. Java Virtual Machine (JVM) sering diinstal sebelumnya pada agen VM, dan Anda tidak perlu khawatir tentang dependensi aplikasi, izin, atau manajemen paket. Anda hanya dapat mengunduh file JAR dan kemudian menjalankannya dengan java -jar.

Aplikasi Node.js memerlukan Node, mungkin dependensi npm, dan manajer layanan seperti systemd untuk hadir dan dikonfigurasi pada setiap agen VM. Agar otomatis, skrip penyebaran alur harus noninteraktif dan dapat memulai ulang dan mengelola layanan aplikasi.

Pekerjaan penyebaran YAML rolling berikut untuk aplikasi JavaScript bergantung pada penyelesaian tahap yang berhasil Build . Pekerjaan penyebaran mengasumsikan bahwa persyaratan berikut sudah diinstal sebelumnya atau telah dikonfigurasi sebelumnya pada setiap VM agen. Untuk otomatisasi penuh, Anda dapat menginstal dan mengonfigurasi aplikasi dan layanan ini pada VM sebagai bagian dari alur.

  • Node.js 16.x terinstal, dan npm tersedia di PATH agen build.
  • Systemd dengan file layanan systemd yang dikonfigurasi untuk layanan yang memulai aplikasi Node.js, seperti /etc/systemd/system/pipelines-javascript.service.
  • Penggunaan sudo tanpa kata sandi untuk pengguna agen dalam perintah yang dibutuhkan, diatur dengan NOPASSWD: di /etc/sudoers.
  • Izin tulis untuk pengguna agen ke /opt/pipelines-javascript atau target penyebaran lainnya.

Petunjuk / Saran

Untuk sebagian besar aplikasi Node.js, pertimbangkan untuk menyebarkan ke Azure App Service atau menggunakan pekerjaan alur reguler dengan agen yang dihosting Microsoft, alih-alih menggunakan pekerjaan penyebaran. Pendekatan ini lebih sederhana dan menghindari overhead operasional dalam mengelola lingkungan VM. Penyebaran ke sumber daya VM tertentu paling cocok untuk skenario yang memerlukan kontrol langsung server VM, orkestrasi tingkat lanjut, atau infrastruktur warisan.

- 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)"

Mengakses keterlacakan alur di lingkungan

Tab Penyebaran lingkungan menyediakan keterlacakan lengkap penerapan dan item kerja dan riwayat penyebaran lintas alur untuk lingkungan.

Cuplikan layar tampilan penerapan.