Bagikan melalui


Menggunakan Azure Pipelines untuk membangun dan mendorong gambar kontainer ke registri

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

Artikel ini memandu Anda melalui penyiapan dan konfigurasi untuk menggunakan Azure Pipelines untuk membangun dan mendorong gambar Docker ke Azure Container Registry, Docker Hub, dan Google Artifact Registry. Selain itu, ini merinci penggunaan System.AccessToken untuk autentikasi aman dalam alur Anda.

Artikel ini memandu Anda melalui penyiapan dan konfigurasi untuk menggunakan Azure Pipelines untuk membangun dan mendorong gambar Docker ke Docker Hub dan Google Artifact Registry. Selain itu, ini merinci penggunaan System.AccessToken untuk autentikasi aman dalam alur Anda.

Anda mempelajari cara membuat alur YAML untuk membangun dan mendorong gambar Docker ke registri kontainer. Tugas Docker@2 digunakan untuk membangun dan mendorong gambar ke registri kontainer.

Prasyarat

  • Proyek Azure DevOps.
  • Registri kontainer (Docker Hub, Google Artifact Registry, atau Azure Container Registry).
  • Repositori GitHub dengan Dockerfile. Jika Anda tidak memilikinya, Anda dapat menggunakan repositori sampel Di browser Anda, buka repositori sampel lalu fork ke akun GitHub Anda.
  • Docker. Jika menggunakan agen yang dihost sendiri, pastikan Docker diinstal dan mesin Docker berjalan dengan hak istimewa yang ditingkatkan. Agen yang dihosting Microsoft telah menginstal Docker sebelumnya.
  • Proyek Azure DevOps.
  • Registri kontainer (Docker Hub atau Google Artifact Registry).
  • Repositori GitHub dengan Dockerfile. Jika Anda tidak memilikinya, Anda dapat menggunakan repositori sampel Di browser Anda, buka repositori sampel lalu fork ke akun GitHub Anda.
  • Docker. Jika menggunakan agen yang dihost sendiri, pastikan Docker diinstal dan mesin Docker berjalan dengan hak istimewa yang ditingkatkan. Agen yang dihosting Microsoft telah menginstal Docker sebelumnya.

Membuat koneksi layanan Docker

Sebelum mendorong gambar kontainer ke registri, Anda perlu membuat koneksi layanan di Azure DevOps. Koneksi layanan ini menyimpan kredensial yang diperlukan untuk mengautentikasi dengan aman dengan registri kontainer. Buka halaman Koneksi layanan di proyek Azure DevOps Anda untuk membuat koneksi layanan baru dan pilih jenis koneksi Docker Registry.

Ada berbagai proses untuk membuat koneksi layanan untuk Docker Hub dan Google Artefak Registri.

Pilih opsi Docker Hub di bawah Koneksi layanan registri Docker dan berikan nama pengguna dan kata sandi Anda untuk membuat koneksi layanan Docker.

Membuat Azure Pipeline untuk membangun dan mendorong gambar Docker

Tugas Docker@2 dirancang untuk menyederhanakan proses membangun, mendorong, dan mengelola gambar Docker dalam Azure Pipelines Anda. Tugas ini mendukung berbagai perintah Docker, termasuk build, push, login, logout, start, stop, dan run.

Langkah-langkah berikut menguraikan cara membuat alur YAML yang menggunakan tugas Docker@2 untuk membangun dan mendorong gambar.

  1. Navigasi ke proyek Azure DevOps Anda dan pilih Alur dari menu sebelah kiri.

  2. Pilih Alur baru untuk membuat alur baru.

  3. Pilih GitHub atau GitHub Enterprise Server sebagai lokasi untuk kode sumber Anda.

  4. Jika Anda belum melakukannya, otorisasi Azure Pipelines untuk menyambungkan ke akun GitHub Enterprise Server Anda.

    1. Pilih Sambungkan ke GitHub Enterprise Server.
    2. Masukkan detail akun Anda, lalu pilih Verifikasi dan simpan.
  5. Pilih repositori Anda. Jika Anda dialihkan ke GitHub

  6. Pilih templat alur Starter untuk membuat konfigurasi alur dasar.

  7. Ganti konten azure-pipelines.yml dengan kode berikut.

  8. Berdasarkan apakah Anda menyebarkan aplikasi Linux atau Windows, pastikan untuk masing-masing diatur vmImage ke atau ubuntu-latest windows-latest. Jika Anda menggunakan agen yang dihost sendiri, atur vmImage ke nama kumpulan yang berisi agen yang dihost sendiri dengan kemampuan Docker. Anda dapat menambahkan demands: docker properti untuk memastikan agen dengan Docker terinstal dipilih.

  9. Ganti <docker connection> dengan nama koneksi layanan Docker yang Anda buat sebelumnya.

  10. Ganti <target repository name> dengan nama repositori di registri kontainer tempat Anda ingin mendorong gambar. Contohnya,<your-docker-hub-username>/<repository-name>.

    
     trigger:
     - main
    
     pool:
     vmImage: 'ubuntu-latest' 
    
     variables:
     repositoryName: '<target repository name>'
    
     steps:
     - task: Docker@2
     inputs:
     containerRegistry: '<docker connection>'
     repository: $(repositoryName)
     command: 'buildAndPush'
     Dockerfile: '**/Dockerfile'
    
    
  11. Setelah selesai, pilih Simpan dan jalankan.

  12. Saat menyimpan file azure-pipelines.yml ke repositori, Anda akan diminta untuk menambahkan pesan penerapan. Masukkan pesan, lalu pilih Simpan dan jalankan.

Saat menggunakan agen yang dihost sendiri, pastikan Docker diinstal pada host agen, dan mesin/daemon Docker berjalan dengan hak istimewa yang ditingkatkan.

Untuk membangun gambar, Docker harus diinstal pada host agen dan mesin/daemon Docker harus berjalan dengan hak istimewa yang ditingkatkan. Gunakan langkah-langkah berikut untuk membuat alur Anda menggunakan editor alur YAML.

  1. Buka koleksi Anda dan buat proyek.

  2. Di proyek Anda, pilih Alur.

  3. Pilih Buat Saluran.

  4. Pilih GitHub Enterprise Server sebagai lokasi untuk kode sumber Anda.

  5. Jika Anda belum melakukannya, otorisasi Azure Pipelines untuk menyambungkan ke akun GitHub Enterprise Server Anda.

    1. Pilih Sambungkan ke GitHub Enterprise Server.
    2. Masukkan detail akun Anda, lalu pilih Verifikasi dan simpan.
  6. Pilih repositori Anda. Jika Anda dialihkan ke GitHub untuk menginstal aplikasi Azure Pipelines, pilih Setujui dan instal.

  7. Untuk mengonfigurasi alur Anda, pilih templat gambar Build a Docker.

  8. Di editor alur YAML, ganti konten file YAML dengan kode berikut. Ganti nama kumpulan dengan nama kumpulan yang berisi agen yang dihost sendiri dengan kemampuan Docker.

  9. Berdasarkan apakah Anda menyebarkan aplikasi Linux atau Windows, pastikan untuk masing-masing diatur vmImage ke atau ubuntu-latest windows-latest.

  10. Ganti <target repository name> dengan nama repositori di registri kontainer tempat Anda ingin mendorong gambar. Contohnya,<your-docker-hub-username>/<repository-name>.

  11. Ganti <docker connection> dengan nama koneksi layanan Docker yang Anda buat sebelumnya.

    
    trigger:
    - main
    
    pool:
    name: default
    demands: docker
    
    variables:
    repositoryName: '<target repository name>'
    
    steps:
    - task: Docker@2
    inputs:
    containerRegistry: '<docker connection>'
    repository: $(repositoryName)
    command: 'buildAndPush'
    Dockerfile: '**/Dockerfile'
    
    
  12. Pilih Simpan dan jalankan.

  13. Pada halaman Simpan dan jalankan , pilih Simpan dan jalankan lagi.

Anda dapat menonton eksekusi alur dan melihat log untuk melihat gambar Docker yang sedang dibangun dan didorong ke registri kontainer.

Menggunakan System.AccessToken untuk Autentikasi dalam Tugas Docker@2

Anda dapat mengautentikasi dengan registri kontainer menggunakan System.AccessToken yang disediakan oleh Azure DevOps. Token ini memungkinkan akses aman ke sumber daya dalam alur Anda tanpa mengekspos info masuk sensitif.

Contoh alur YAML berikut, tugas Docker@2 digunakan untuk masuk ke registri kontainer dan mendorong gambar Docker. System.AccessToken diatur sebagai variabel lingkungan untuk mengautentikasi perintah Docker.

Ganti <docker connection> dengan nama koneksi layanan registri Docker Anda. Ganti <your repository> dengan nama repositori Docker Anda.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  SYSTEM_ACCESSTOKEN: $(System.AccessToken)

steps:
- task: Docker@2
  inputs:
    command: login
    containerRegistry: '<docker connection>'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- task: Docker@2
  inputs:
    command: buildAndPush
    repository: '<your repository>'
    dockerfile: '**/Dockerfile'
    tags: |
      $(Build.BuildId)
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)