Kapsayıcı işlerini tanımlama (YAML)
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Varsayılan olarak, işler aracının yüklü olduğu konak makinede çalışır. Bu kullanışlı bir özelliktir ve genellikle Azure Pipelines'ı benimsemeye yeni başlayan projeler için uygundur. Zaman içinde, görevlerinizin çalıştığı bağlam üzerinde daha fazla denetim sahibi olmak istediğinizi fark edebilirsiniz. YAML işlem hatları, bu denetim düzeyi için kapsayıcı işleri sunar.
Linux ve Windows aracılarında işler konakta veya kapsayıcıda çalıştırılabilir. (macOS ve Red Hat Enterprise Linux 6'da kapsayıcı işleri kullanılamaz.) Kapsayıcılar konaktan yalıtım sağlar ve araçların ve bağımlılıkların belirli sürümlerini sabitlemenize olanak sağlar. Konak işlerinin sürdürülmesi için daha az ilk kurulum ve altyapı gerekir.
Kapsayıcılar, konak işletim sistemi üzerinde basit bir soyutlama sunar. Derlemenizin gerektirdiği işletim sistemlerinin, araçların ve bağımlılıkların tam sürümlerini seçebilirsiniz. İşlem hattınızda bir kapsayıcı belirttiğinizde aracı önce kapsayıcıyı getirir ve başlatır. Ardından, işin her adımı kapsayıcı içinde çalıştırılır. İç içe kapsayıcılara sahip olamazsınız. Kapsayıcılar, bir aracı zaten bir kapsayıcı içinde çalışırken desteklenmez.
Adım düzeyinde ayrıntılı denetime ihtiyacınız varsa, adım hedefleri her adım için kapsayıcı veya konak seçmenize olanak tanır.
Gereksinimler
Linux tabanlı kapsayıcılar
Azure Pipelines sistemi, Linux tabanlı kapsayıcılarda birkaç şey gerektirir:
- Bash
- glibc tabanlı
- Node.js 'yi (aracının sağladığı) çalıştırabilir
- Tanımlamaz
ENTRYPOINT
USER
groupadd
ve diğer ayrıcalık komutlarınasudo
Aracı ana bilgisayarınızda:
- Docker'ın yüklü olduğundan emin olun
- Aracının Docker daemon'a erişme izni olmalıdır
Kapsayıcınızda bu araçların her birinin kullanılabilir olduğundan emin olun. Docker Hub'da bulunan, özellikle Alpine Linux tabanlı kapsayıcıların bazıları bu minimum gereksinimleri karşılamaz. Azure Pipelines bekleyen bir kapsayıcı ve docker exec
kapsayıcının her zaman çalışır durumda olmasını bekleyen bir dizi komut olacağından, kapsayıcısı olan ENTRYPOINT
kapsayıcılar docker create
çalışmayabilir.
Dekont
Windows tabanlı Linux kapsayıcıları için Node.js dosyasının önceden yüklenmiş olması gerekir.
Windows Kapsayıcıları
Azure Pipelines, Windows Kapsayıcıları da çalıştırabilir. Windows Server sürüm 1803 veya üzeri gereklidir. Docker yüklü olmalıdır. İşlem hatları aracınızın Docker daemon'a erişme izni olduğundan emin olun.
Windows kapsayıcısı Node.js'nin çalıştırılmasını desteklemelidir. Temel Bir Windows Nano Sunucu kapsayıcısı, Node'u çalıştırmak için gereken bağımlılıkları eksik.
Barındırılan aracılar
Yalnızca windows-2019
ve ubuntu-*
görüntüleri kapsayıcı çalıştırmayı destekler.
macOS görüntüsü kapsayıcı çalıştırmayı desteklemez.
Tek iş
Basit bir örnek:
pool:
vmImage: 'ubuntu-latest'
container: ubuntu:18.04
steps:
- script: printenv
Bu, sisteme Docker Hub'dan etiketlenmiş 18.04
görüntüyü getirmesini ubuntu
ve ardından kapsayıcıyı başlatmasını söyler. printenv
Komut çalıştırıldığında kapsayıcının ubuntu:18.04
içinde gerçekleşir.
Bir Windows örneği:
pool:
vmImage: 'windows-2019'
container: mcr.microsoft.com/windows/servercore:ltsc2019
steps:
- script: set
Dekont
Windows, konak ve kapsayıcının çekirdek sürümünün eşleşmesini gerektirir.
Bu örnekte Windows 2019 görüntüsü kullanıldığı için kapsayıcının 2019
etiketini kullanacağız.
Birden çok iş
Kapsayıcılar aynı adımları birden çok işte çalıştırmak için de yararlıdır.
Aşağıdaki örnekte, aynı adımlar Ubuntu Linux'un birden çok sürümünde çalıştırılır.
(Yalnızca tek bir iş tanımlandığından anahtar sözcüğünden jobs
bahsetmemiz gerekmez.)
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
ubuntu16:
containerImage: ubuntu:16.04
ubuntu18:
containerImage: ubuntu:18.04
ubuntu20:
containerImage: ubuntu:20.04
container: $[ variables['containerImage'] ]
steps:
- script: printenv
Uç Noktalar
Kapsayıcılar genel Docker Hub kayıt defterleri dışındaki kayıt defterlerinde barındırılabilir. Azure Container Registry'de veya başka bir özel kapsayıcı kayıt defterinde (özel Docker Hub kayıt defteri dahil) bir görüntü barındırmak için, özel kayıt defterine bir hizmet bağlantısı ekleyin. Ardından kapsayıcı belirtiminde başvurabilirsiniz:
container:
image: registry:ubuntu1804
endpoint: private_dockerhub_connection
steps:
- script: echo hello
veya
container:
image: myprivate.azurecr.io/windowsservercore:1803
endpoint: my_acr_connection
steps:
- script: echo hello
Diğer kapsayıcı kayıt defterleri de çalışabilir. AWS kimlik bilgilerini Docker'ın kimlik doğrulaması için kullanabileceği bir şeye dönüştürmek için gereken diğer istemci araçları olduğundan Amazon ECR şu anda çalışmıyor.
Dekont
Aracının Red Hat Enterprise Linux 6 derlemesi kapsayıcı işini çalıştırmaz. Red Hat Enterprise Linux 7 veya üzeri gibi başka bir Linux çeşidi seçin.
Seçenekler
Kapsayıcı başlatmayı denetlemeniz gerekiyorsa belirtebilirsiniz options
.
container:
image: ubuntu:18.04
options: --hostname container-test --ip 192.168.0.1
steps:
- script: echo hello
Komutunu çalıştırdığınızda docker create --help
Docker çağrısına geçirilebilen seçeneklerin listesi sunulur. Bu seçeneklerin tümü Azure DevOps ile çalışma garantisine sahip değildir. Aynı hedefe ulaşmak için bir kapsayıcı özelliği kullanıp kullanamadığını görmek için önce denetleyin. Daha fazla bilgi için YAML şemasınave komut başvurusuna docker create
bakınresources.containers.container
.
Yeniden kullanılabilir kapsayıcı tanımı
Aşağıdaki örnekte kapsayıcılar kaynaklar bölümünde tanımlanmıştır.
Daha sonra her kapsayıcıya, atanan diğer adına başvurularak başvurulur.
(Burada, netlik için anahtar sözcüğü açıkça listeleyeceğiz jobs
.)
resources:
containers:
- container: u16
image: ubuntu:16.04
- container: u18
image: ubuntu:18.04
- container: u20
image: ubuntu:20.04
jobs:
- job: RunInContainer
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
ubuntu16:
containerResource: u16
ubuntu18:
containerResource: u18
ubuntu20:
containerResource: u20
container: $[ variables['containerResource'] ]
steps:
- script: printenv
Glibc tabanlı olmayan kapsayıcılar
Azure Pipelines aracısı, görevleri ve betikleri çalıştırmak için gereken Node.js dosyasının bir kopyasını sağlar. Barındırılan bir aracı için Node.js sürümünü öğrenmek için bkz . Microsoft tarafından barındırılan aracılar. Node.js sürümü genellikle glibc olan barındırılan bulutumuzda kullandığımız C çalışma zamanına göre derlenmektedir. Linux'un bazı varyantları diğer C çalışma zamanlarını kullanır. Örneğin Alpine Linux musl kullanır.
Glibc tabanlı olmayan bir kapsayıcıyı iş kapsayıcısı olarak kullanmak istiyorsanız, birkaç şeyi kendiniz düzenlemeniz gerekir. İlk olarak, kendi Node.js kopyanızı sağlamanız gerekir. İkincisi, aracıya Node.js ikili dosyasını nerede bulacağını söyleyen bir etiket eklemeniz gerekir. Son olarak, Alpine hisse senedi Azure Pipelines'ın bağımlı olduğu diğer bağımlılıklarla birlikte gelmez: bash, sudo, which ve groupadd.
Kendi Node.js'nizi getirin
Kapsayıcınıza bir Node ikili dosyası eklemek sizin sorumluluğunuzdadır.
Düğüm 14 güvenli bir seçimdir.
Görüntüden node:14-alpine
başlayabilirsiniz.
Aracıya Node.js hakkında bilgi ver
Aracı , "com.azure.dev.pipelines.handler.node.path" kapsayıcı etiketini okur.
Bu etiket varsa Node.js ikili dosyasının yolu olmalıdır.
Örneğin, öğesini node:10-alpine
temel alan bir görüntüde bu satırı Dockerfile dosyanıza ekleyin:
LABEL "com.azure.dev.pipelines.agent.handler.node.path"="/usr/local/bin/node"
Gereksinimleri ekleme
Azure Pipelines, yaygın yönetim paketlerinin yüklü olduğu Bash tabanlı bir sistem olduğunu varsayar.
Alpine Linux özellikle gerekli paketlerin birkaçı ile birlikte gelmez.
, ve sudo
shadow
yükleme bash
temel ihtiyaçlarını karşılar.
RUN apk add bash sudo shadow
Kutu içi veya Market görevlerine bağımlıysanız, bunların gerektirdiği ikili dosyaları da sağlamanız gerekir.
Dockerfile'ın tam örneği
FROM node:10-alpine
RUN apk add --no-cache --virtual .pipeline-deps readline linux-pam \
&& apk add bash sudo shadow \
&& apk del .pipeline-deps
LABEL "com.azure.dev.pipelines.agent.handler.node.path"="/usr/local/bin/node"
CMD [ "node" ]
Tek bir barındırılan aracıda aracı havuzları olan birden çok iş
Kapsayıcı işi, Docker kayıt defteri kapsayıcısı başlatma işleminin sonunda oturumu kapatan görüntü kayıt defteri yetkilendirmesi için temel konak aracısı Docker config.json'u kullanır. Kimlik doğrulaması için sistemde kayıtlı Docker config.json dosyası paralel olarak çalışan diğer kapsayıcı işlerinden biri tarafından zaten oturumu kapatılmış olduğundan, sonraki kayıt defteri görüntüsü çekme yetkilendirmesi "yetkisiz kimlik doğrulaması" için reddedilebilir.
Çözüm, barındırılan aracıda çalışan her aracı havuzu hizmetine özgü Docker ortam değişkenini DOCKER_CONFIG
ayarlamaktır. Her aracı havuzunun runsvc.sh betiğindeki dosyasını DOCKER_CONFIG
dışarı aktarın:
#insert anything to set up env when running as a service
export DOCKER_CONFIG=./.docker
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin