Bagikan melalui


Docker@2 - Tugas Docker v2

Buat atau dorong gambar Docker, masuk atau keluar, mulai atau hentikan kontainer, atau jalankan perintah Docker.

Sintaksis

# Docker v2
# Build or push Docker images, login or logout, start or stop containers, or run a Docker command.
- task: Docker@2
  inputs:
  # Container Repository
    #containerRegistry: # string. Container registry. 
    #repository: # string. Optional. Use when command != login && command != logout && command != start && command != stop. Container repository. 
  # Commands
    command: 'buildAndPush' # 'buildAndPush' | 'build' | 'push' | 'login' | 'logout' | 'start' | 'stop'. Required. Command. Default: buildAndPush.
    Dockerfile: '**/Dockerfile' # string. Required when command = build || command = buildAndPush. Dockerfile. Default: **/Dockerfile.
    #buildContext: '**' # string. Optional. Use when command = build || command = buildAndPush. Build context. Default: **.
    #tags: '$(Build.BuildId)' # string. Optional. Use when command = build || command = push || command = buildAndPush. Tags. Default: $(Build.BuildId).
    #arguments: # string. Optional. Use when command != login && command != logout && command != buildAndPush. Arguments. 
    #addPipelineData: true # boolean. Add Pipeline metadata to image(s). Default: true.
    #addBaseImageData: true # boolean. Add base image metadata to image(s). Default: true.
    #container: # string. Optional. Use when command = start || command = stop. Container.

Masukan

registri kontainer containerRegistry -
string.

Nama koneksi layanan registri Docker . Diperlukan untuk perintah yang melakukan autentikasi dengan registri.


repositori kontainer repository -
string. Fakultatif. Gunakan saat command != login && command != logout && command != start && command != stop.

Menentukan nama repositori.


Perintah
string. Dibutuhkan. Nilai yang diizinkan: buildAndPush, build, push, login, logout, start, stop. Nilai default: buildAndPush.

Menentukan perintah Docker untuk dijalankan.


Dockerfile Dockerfile -
string. Diperlukan saat command = build || command = buildAndPush. Nilai default: **/Dockerfile.

Menentukan jalur ke file Docker. Tugas ini menggunakan file Docker pertama yang ditemukannya untuk membangun gambar.


konteks build buildContext -
string. Fakultatif. Gunakan saat command = build || command = buildAndPush. Nilai default: **.

Menentukan jalur ke konteks build. Teruskan ** untuk menunjukkan direktori yang berisi file Docker.


Tag tags -
string. Fakultatif. Gunakan saat command = build || command = push || command = buildAndPush. Nilai default: $(Build.BuildId).

Menentukan daftar tag yang dipisahkan koma. Tag ini digunakan dalam perintah build, push, dan buildAndPush.


Argumen
string. Fakultatif. Gunakan saat command != login && command != logout && command != buildAndPush.

Menentukan argumen tambahan untuk diteruskan ke klien Docker. Jika menggunakan nilai buildAndPush untuk parameter perintah, properti argumen diabaikan.

Contoh: Menggunakan perintah build, --build-arg HTTP_PROXY=http://10.20.30.2:1234 --quiet.


addPipelineData - Tambahkan metadata Alur ke gambar
boolean. Nilai default: true.

Secara default, data alur seperti nama cabang sumber, atau ID build ditambahkan dan membantu keterlacakan. Misalnya, Anda dapat memeriksa gambar untuk mengetahui alur mana yang membangun gambar. Anda dapat menolak perilaku default ini.


addBaseImageData - Menambahkan metadata gambar dasar ke gambar
boolean. Nilai default: true.

Secara default, data gambar dasar seperti nama gambar dasar, atau hash ditambahkan dan membantu keterlacakan. Anda dapat menolak perilaku default ini.


Kontainer container -
string. Fakultatif. Gunakan saat command = start || command = stop.

Menentukan nama sumber daya kontainer untuk memulai atau berhenti. Gunakan perintah ini dengan perintah start dan stop.


Opsi kontrol tugas

Semua tugas memiliki opsi kontrol selain input tugasnya. Untuk informasi selengkapnya, lihat opsi Kontrol dan properti tugas umum.

Variabel output

Tugas ini mendefinisikan variabel output berikut, yang dapat Anda konsumsi dalam langkah-langkah hilir, pekerjaan, dan tahapan.

DockerOutput
Menentukan jalur ke file yang berisi output perintah. Anda dapat mencantumkan dua jalur file pada baris terpisah untuk perintah buildAndPush, dan satu jalur file untuk perintah lainnya.

Komentar

Berikut ini adalah manfaat utama menggunakan tugas Docker alih-alih langsung menggunakan biner klien Docker dalam skrip.

  • Integrasi dengan koneksi layanan registri Docker - Tugas ini memudahkan penggunaan koneksi layanan registri Docker untuk menyambungkan ke registri kontainer apa pun. Setelah masuk, Anda dapat menambahkan tugas tindak lanjut yang menjalankan tugas atau skrip lain dengan memanfaatkan masuk yang digunakan oleh tugas Docker. Misalnya, gunakan tugas Docker untuk masuk ke Azure Container Registry apa pun, lalu gunakan tugas atau skrip lain untuk membangun dan mendorong gambar ke registri.

  • Metadata ditambahkan sebagai label - Tugas menambahkan metadata terkait keterlacakan ke gambar di label berikut -

    • com.azure.dev.image.build.buildnumber
    • com.azure.dev.image.builduri.builduri
    • com.azure.dev.image.build.definitionname
    • com.azure.dev.image.build.repository.name
    • com.azure.dev.image.build.repository.uri
    • com.azure.dev.image.build.sourcebranchname
    • com.azure.dev.image.build.sourceversion
    • com.azure.dev.image.release.definitionname
    • com.azure.dev.image.release.releaseid
    • com.azure.dev.image.release.releaseweburl
    • com.azure.dev.image.system.teamfoundationcollectionuri
    • com.azure.dev.image.system.teamproject

Pemecahan masalah

Mengapa tugas Docker mengabaikan argumen yang diteruskan ke perintah buildAndPush?

Tugas Docker yang dikonfigurasi menggunakan perintah buildAndPush mengabaikan argumen yang diteruskan karena menjadi ambigu ke perintah build dan push internal. Anda dapat membagi perintah menjadi langkah-langkah build dan dorong terpisah dan meneruskan argumen yang sesuai. Misalnya, lihat postingan stackoverflow ini.

DockerV2 hanya mendukung koneksi layanan registri Docker dan tidak mendukung koneksi layanan ARM. Bagaimana cara menggunakan perwakilan layanan Azure (SPN) yang sudah ada untuk autentikasi dalam tugas Docker?

Anda dapat membuat koneksi layanan registri Docker menggunakan info masuk Azure SPN Anda. Pilih yang lain dari jenis Registri dan berikan detailnya sebagai berikut:

Docker Registry:    Your container registry URL (eg. https://myacr.azurecr.io)
Docker ID:          Service principal client ID
Password:           Service principal key

Contoh

Masuk

Cuplikan YAML berikut menunjukkan masuk registri kontainer menggunakan koneksi layanan registri Docker.

- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection1

Bangun dan Dorong

Perintah kenyamanan yang disebut buildAndPush memungkinkan build dan pendorongan gambar ke registri kontainer dalam satu perintah.

Cuplikan YAML berikut adalah contoh membangun dan mendorong beberapa tag gambar ke beberapa registri.

steps:
- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection1
- task: Docker@2
  displayName: Login to Docker Hub
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection2
- task: Docker@2
  displayName: Build and Push
  inputs:
    command: buildAndPush
    repository: contosoRepository # username/contosoRepository for DockerHub
    tags: |
      tag1
      tag2

Dalam cuplikan di atas, gambar contosoRepository:tag1 dan contosoRepository:tag2 dibangun dan didorong ke registri kontainer yang sesuai dengan dockerRegistryServiceConnection1 dan dockerRegistryServiceConnection2.

Jika Anda ingin membangun dan mendorong ke registri kontainer terautentikasi tertentu alih-alih membangun dan mendorong ke semua registri kontainer terautentikasi sekaligus, tentukan input containerRegistry secara eksplisit dengan command: buildAndPush seperti yang ditunjukkan:

steps:
- task: Docker@2
  displayName: Build and Push
  inputs:
    command: buildAndPush
    containerRegistry: dockerRegistryServiceConnection1
    repository: contosoRepository
    tags: |
      tag1
      tag2

Keluar

Cuplikan YAML berikut menunjukkan cara keluar dari registri kontainer menggunakan koneksi layanan registri Docker.

- task: Docker@2
  displayName: Logout of ACR
  inputs:
    command: logout
    containerRegistry: dockerRegistryServiceConnection1

Mulai/hentikan

Gunakan tugas ini untuk mengontrol pekerjaan dan kontainer layanan. Penggunaan ini jarang terjadi, tetapi kadang-kadang digunakan dalam keadaan unik.

resources:
  containers:
  - container: builder
    image: ubuntu:18.04
steps:
- script: echo "I can run inside the container (it starts by default)"
  target:
    container: builder
- task: Docker@2
  inputs:
    command: stop
    container: builder
# any task beyond this point would not be able to target the builder container
# because it's been stopped

Perintah dan argumen lainnya

Input perintah dan argumen digunakan untuk meneruskan argumen tambahan untuk perintah build atau push menggunakan biner klien Docker seperti yang ditunjukkan dalam contoh.

steps:
- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection1
- task: Docker@2
  displayName: Build
  inputs:
    command: build
    repository: contosoRepository # username/contosoRepository for DockerHub
    tags: tag1
    arguments: --secret id=mysecret,src=mysecret.txt

Nota

Input argumen dievaluasi untuk semua perintah kecuali buildAndPush. buildAndPush adalah perintah kenyamanan (build diikuti oleh push), input arguments diabaikan saat digunakan.

Persyaratan

Persyaratan Deskripsi
Jenis alur YAML, Build klasik, Rilis klasik
Berjalan pada Agen, DeploymentGroup
Permintaan Tidak
Kemampuan Tugas ini tidak memenuhi tuntutan apa pun untuk tugas berikutnya dalam pekerjaan.
pembatasan Perintah Apapun
variabel yang Dapat Diatur Apapun
Versi agen 2.172.0 atau lebih tinggi
Kategori tugas Membangun