Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Bu makalede, Azure Pipelines aracınızı Docker'da çalıştırma yönergeleri sağlanır. Azure Pipelines'da, Docker ile Windows Server Core (Windows konakları için) veya Ubuntu kapsayıcı (Linux konakları için) içinde çalışan bir şirket içi barındırılan aracı ayarlayabilirsiniz. Bu, Azure Container Instances gibi dış düzenleme ile aracıları çalıştırmak istediğinizde kullanışlıdır. Bu makalede, bir kapsayıcı örneğini eksiksiz bir şekilde incelerken ajan kendi kendine güncellemeyi yönetme konusunu da ele alacaksınız.
Hem Windows hem de Linux kapsayıcı konakları olarak desteklenir. Windows kapsayıcıları bir Windows vmImage üzerinde çalıştırılmalıdır.
Aracınızı Docker'da çalıştırmak için Azure Pipelines veya Azure DevOps Server'a bağlanacak şekilde yapılandırmak amacıyla birkaç ortam değişkenini 'e geçireceksiniz. Son olarak kapsayıcıyı gereksinimlerinize uyacak şekilde özelleştirebilirsiniz. Görevler ve betikler, kapsayıcının PATHüzerinde kullanılabilen belirli araçlara bağlı olabilir ve bu araçların kullanılabilir olduğundan emin olmak sizin sorumluluğunuzdadır.
Windows
Hyper-V'yi etkinleştirme
Hyper-V, Windows'ta varsayılan olarak etkin değildir. Kapsayıcılar arasında yalıtım sağlamak istiyorsanız Hyper-V'yi etkinleştirmeniz gerekir. Aksi takdirde, Windows için Docker başlatılmaz.
Not (mesaj/derece)
Makinenizde sanallaştırmayı etkinleştirmeniz gerekir. Genellikle varsayılan olarak etkindir. Ancak, Hyper-V yüklemesi başarısız olursa sanallaştırmayı etkinleştirme hakkında sistem belgelerinize bakın.
Windows için Docker'ı yükleme
Windows 10 kullanıyorsanız Docker Community Edition'ı yükleyebilirsiniz. Windows Server 2016 için Docker Enterprise Sürümü yükleyin.
Docker'ı Windows kapsayıcılarını kullanacak şekilde değiştirme
Varsayılan olarak, Windows için Docker Linux kapsayıcılarını kullanacak şekilde yapılandırılır. Windows kapsayıcısının çalıştırılmasına izin vermek için Windows için Docker'ın Windows daemon'unu çalıştırdığını onaylayın.
Dockerfile oluştur ve yapılandır
Ardından Dockerfile'ı oluşturun.
Komut istemi açın.
Yeni dizin oluşturma:
mkdir "C:\azp-agent-in-docker\"Şu yeni dizine gidin:
cd "C:\azp-agent-in-docker\"Aşağıdaki içeriği adlı
C:\azp-agent-in-docker\azp-agent-windows.dockerfilebir dosyaya kaydedin:FROM mcr.microsoft.com/windows/servercore:ltsc2022 WORKDIR /azp/ COPY ./start.ps1 ./ CMD powershell .\start.ps1Aşağıdaki içeriği 'ye
C:\azp-agent-in-docker\start.ps1kaydedin:function Print-Header ($header) { Write-Host "`n${header}`n" -ForegroundColor Cyan } if (-not (Test-Path Env:AZP_URL)) { Write-Error "error: missing AZP_URL environment variable" exit 1 } if (-not (Test-Path Env:AZP_TOKEN_FILE)) { if (-not (Test-Path Env:AZP_TOKEN)) { Write-Error "error: missing AZP_TOKEN environment variable" exit 1 } $Env:AZP_TOKEN_FILE = "\azp\.token" $Env:AZP_TOKEN | Out-File -FilePath $Env:AZP_TOKEN_FILE } Remove-Item Env:AZP_TOKEN if ((Test-Path Env:AZP_WORK) -and -not (Test-Path $Env:AZP_WORK)) { New-Item $Env:AZP_WORK -ItemType directory | Out-Null } New-Item "\azp\agent" -ItemType directory | Out-Null # Let the agent ignore the token env variables $Env:VSO_AGENT_IGNORE = "AZP_TOKEN,AZP_TOKEN_FILE" Set-Location agent Print-Header "1. Determining matching Azure Pipelines agent..." $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(Get-Content ${Env:AZP_TOKEN_FILE})")) $package = Invoke-RestMethod -Headers @{Authorization=("Basic $base64AuthInfo")} "$(${Env:AZP_URL})/_apis/distributedtask/packages/agent?platform=win-x64&`$top=1" $packageUrl = $package[0].Value.downloadUrl Write-Host $packageUrl Print-Header "2. Downloading and installing Azure Pipelines agent..." $wc = New-Object System.Net.WebClient $wc.DownloadFile($packageUrl, "$(Get-Location)\agent.zip") Expand-Archive -Path "agent.zip" -DestinationPath "\azp\agent" try { Print-Header "3. Configuring Azure Pipelines agent..." .\config.cmd --unattended ` --agent "$(if (Test-Path Env:AZP_AGENT_NAME) { ${Env:AZP_AGENT_NAME} } else { hostname })" ` --url "$(${Env:AZP_URL})" ` --auth PAT ` --token "$(Get-Content ${Env:AZP_TOKEN_FILE})" ` --pool "$(if (Test-Path Env:AZP_POOL) { ${Env:AZP_POOL} } else { 'Default' })" ` --work "$(if (Test-Path Env:AZP_WORK) { ${Env:AZP_WORK} } else { '_work' })" ` --replace Print-Header "4. Running Azure Pipelines agent..." .\run.cmd } finally { Print-Header "Cleanup. Removing Azure Pipelines agent..." .\config.cmd remove --unattended ` --auth PAT ` --token "$(Get-Content ${Env:AZP_TOKEN_FILE})" }Bu dizinde aşağıdaki komutu çalıştırın:
docker build --tag "azp-agent:windows" --file "./azp-agent-windows.dockerfile" .Son görüntü,
azp-agent:windowsile etiketlenmiştir.
Görüntüyü başlat.
Artık bir görüntü oluşturduğunuza göre bir kapsayıcı çalıştırabilirsiniz. Bu, aracının en son sürümünü yükler, yapılandırır ve aracıyı çalıştırır. Seçtiğiniz belirli bir Azure DevOps veya Azure DevOps Server örneğinin belirtilen aracı havuzunu ( Default varsayılan olarak aracı havuzu) hedefler:
docker run -e AZP_URL="<Azure DevOps instance>" -e AZP_TOKEN="<Personal Access Token>" -e AZP_POOL="<Agent Pool Name>" -e AZP_AGENT_NAME="Docker Agent - Windows" --name "azp-agent-windows" azp-agent:windows
Ağ sorunlarıyla karşılaşırsanız parametresini --network belirtmeniz gerekebilir.
docker run --network "Default Switch" < . . . >
Kapsayıcıyı durdurmak ve ajanı kaldırmak istiyorsanız, --interactive ve --tty bayraklarını (ya da basitçe -it) belirtmeniz gerekebilir Ctrl + C.
docker run --interactive --tty < . . . >
Her işlem hattı işi için yeni bir aracı kapsayıcısı istiyorsanız, --once komutunuza iletin.
docker run < . . . > --once
--once bayrağıyla, görev tamamlandığında kapsayıcının yeni bir kopyasını başlatmak için Kubernetes veya Azure Container Instances gibi bir kapsayıcı düzenleme sistemi kullanmak isteyebilirsiniz.
İsteğe bağlı ortam değişkenlerini kullanarak aracı adını, aracı havuzunu ve aracı iş dizinini denetleyebilirsiniz.
Linux işletim sistemi
Docker'ı yükleme
Linux Dağıtımınıza bağlı olarak Docker Community Edition veya Docker Enterprise Sürümü yükleyebilirsiniz.
Dockerfile oluştur ve yapılandır
Ardından Dockerfile'ı oluşturun.
Bir terminal açın.
Yeni dizin oluşturma (önerilen):
mkdir ~/azp-agent-in-docker/Şu yeni dizine gidin:
cd ~/azp-agent-in-docker/Aşağıdaki içeriği 'ye
~/azp-agent-in-docker/azp-agent-linux.dockerfilekaydedin:Alpine için, sorununu çözmek amacıyla'de açıklanan tekniği kullanın.
FROM python:3-alpine ENV TARGETARCH="linux-musl-x64" # Another option: # FROM arm64v8/alpine # ENV TARGETARCH="linux-musl-arm64" RUN apk update && \ apk upgrade && \ apk add bash curl gcc git icu-libs jq musl-dev python3-dev libffi-dev openssl-dev cargo make # Install Azure CLI RUN pip install --upgrade pip RUN pip install azure-cli WORKDIR /azp/ COPY ./start.sh ./ RUN chmod +x ./start.sh RUN adduser -D agent RUN chown agent ./ USER agent # Another option is to run the agent as root. # ENV AGENT_ALLOW_RUNASROOT="true" ENTRYPOINT [ "./start.sh" ]Ubuntu 24.04 için:
FROM ubuntu:24.04 ENV TARGETARCH="linux-x64" # Also can be "linux-arm", "linux-arm64". RUN apt update && \ apt upgrade -y && \ apt install -y curl git jq libicu74 # Install Azure CLI RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash WORKDIR /azp/ COPY ./start.sh ./ RUN chmod +x ./start.sh # Create agent user and set up home directory RUN useradd -m -d /home/agent agent RUN chown -R agent:agent /azp /home/agent USER agent # Another option is to run the agent as root. # ENV AGENT_ALLOW_RUNASROOT="true" ENTRYPOINT [ "./start.sh" ]Ubuntu 22.04 için:
FROM ubuntu:22.04 ENV TARGETARCH="linux-x64" # Also can be "linux-arm", "linux-arm64". RUN apt update && \ apt upgrade -y && \ apt install -y curl git jq libicu70 # Install Azure CLI RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash WORKDIR /azp/ COPY ./start.sh ./ RUN chmod +x ./start.sh # Create agent user and set up home directory RUN useradd -m -d /home/agent agent RUN chown -R agent:agent /azp /home/agent USER agent # Another option is to run the agent as root. # ENV AGENT_ALLOW_RUNASROOT="true" ENTRYPOINT [ "./start.sh" ]
Aracıyı kök olarak çalıştırmak istiyorsanız,
ENV AGENT_ALLOW_RUNASROOT="true"satırındaki açıklamayı kaldırın ve bu satırdan önceagentkullanıcısını eklemeyi durdurun.Not (mesaj/derece)
Görevler, kapsayıcınızın sağlaması beklenen yürütülebilir dosyalara bağlı olabilir. Örneğin,
zipveunzipgörevlerini çalıştırmak içinRUN apt install -ykomutunaArchiveFilesveExtractFilespaketlerini eklemeniz gerekir. Ayrıca, aracının kullanması için bir Linux Ubuntu görüntüsü olduğundan, görüntüyü istediğiniz gibi özelleştirebilirsiniz. Örneğin: .NET uygulamaları oluşturmanız gerekiyorsa Ubuntu'da .NET SDK'sını veya .NET Çalışma Zamanı'nı yükleme belgesini izleyebilir ve bunu görüntünüze ekleyebilirsiniz.Unix stili (LF) satır sonlarını kullandığınızdan emin olmak için aşağıdaki içeriği
~/azp-agent-in-docker/start.shöğesine kaydedin:#!/bin/bash set -e if [ -z "${AZP_URL}" ]; then echo 1>&2 "error: missing AZP_URL environment variable" exit 1 fi if [ -n "$AZP_CLIENTID" ]; then echo "Using service principal credentials to get token" az login --allow-no-subscriptions --service-principal --username "$AZP_CLIENTID" --password "$AZP_CLIENTSECRET" --tenant "$AZP_TENANTID" # adapted from https://learn.microsoft.com/en-us/azure/databricks/dev-tools/user-aad-token AZP_TOKEN=$(az account get-access-token --query accessToken --output tsv) echo "Token retrieved" fi if [ -z "${AZP_TOKEN_FILE}" ]; then if [ -z "${AZP_TOKEN}" ]; then echo 1>&2 "error: missing AZP_TOKEN environment variable" exit 1 fi AZP_TOKEN_FILE="/azp/.token" echo -n "${AZP_TOKEN}" > "${AZP_TOKEN_FILE}" fi unset AZP_CLIENTSECRET unset AZP_TOKEN if [ -n "${AZP_WORK}" ]; then mkdir -p "${AZP_WORK}" fi cleanup() { trap "" EXIT if [ -e ./config.sh ]; then print_header "Cleanup. Removing Azure Pipelines agent..." # If the agent has some running jobs, the configuration removal process will fail. # So, give it some time to finish the job. while true; do ./config.sh remove --unattended --auth "PAT" --token $(cat "${AZP_TOKEN_FILE}") && break echo "Retrying in 30 seconds..." sleep 30 done fi } print_header() { lightcyan="\033[1;36m" nocolor="\033[0m" echo -e "\n${lightcyan}$1${nocolor}\n" } # Let the agent ignore the token env variables export VSO_AGENT_IGNORE="AZP_TOKEN,AZP_TOKEN_FILE" print_header "1. Determining matching Azure Pipelines agent..." AZP_AGENT_PACKAGES=$(curl -LsS \ -u user:$(cat "${AZP_TOKEN_FILE}") \ -H "Accept:application/json" \ "${AZP_URL}/_apis/distributedtask/packages/agent?platform=${TARGETARCH}&top=1") AZP_AGENT_PACKAGE_LATEST_URL=$(echo "${AZP_AGENT_PACKAGES}" | jq -r ".value[0].downloadUrl") if [ -z "${AZP_AGENT_PACKAGE_LATEST_URL}" -o "${AZP_AGENT_PACKAGE_LATEST_URL}" == "null" ]; then echo 1>&2 "error: could not determine a matching Azure Pipelines agent" echo 1>&2 "check that account "${AZP_URL}" is correct and the token is valid for that account" exit 1 fi print_header "2. Downloading and extracting Azure Pipelines agent..." curl -LsS "${AZP_AGENT_PACKAGE_LATEST_URL}" | tar -xz & wait $! source ./env.sh trap "cleanup; exit 0" EXIT trap "cleanup; exit 130" INT trap "cleanup; exit 143" TERM print_header "3. Configuring Azure Pipelines agent..." # Despite it saying "PAT", it can be the token through the service principal ./config.sh --unattended \ --agent "${AZP_AGENT_NAME:-$(hostname)}" \ --url "${AZP_URL}" \ --auth "PAT" \ --token $(cat "${AZP_TOKEN_FILE}") \ --pool "${AZP_POOL:-Default}" \ --work "${AZP_WORK:-_work}" \ --replace \ --acceptTeeEula & wait $! print_header "4. Running Azure Pipelines agent..." chmod +x ./run.sh # To be aware of TERM and INT signals call ./run.sh # Running it with the --once flag at the end will shut down the agent after the build is executed ./run.sh "$@" & wait $!Not (mesaj/derece)
Ayrıca, iş tamamlandığında kapsayıcının yeni kopyalarını başlatmak için Kubernetes veya Azure Container Instances gibi bir kapsayıcı düzenleme sistemi kullanmanız gerekir.
Bu dizinde aşağıdaki komutu çalıştırın:
docker build --tag "azp-agent:linux" --file "./azp-agent-linux.dockerfile" .Son görüntü,
azp-agent:linuxile etiketlenmiştir.
Görüntüyü başlat.
Artık bir görüntü oluşturduğunuza göre bir kapsayıcı çalıştırabilirsiniz. Bu, aracının en son sürümünü yükler, yapılandırır ve aracıyı çalıştırır. Seçtiğiniz belirli bir Azure DevOps veya Azure DevOps Server örneğinin belirtilen aracı havuzunu ( Default varsayılan olarak aracı havuzu) hedefler:
docker run -e AZP_URL="<Azure DevOps instance>" -e AZP_TOKEN="<Personal Access Token>" -e AZP_POOL="<Agent Pool Name>" -e AZP_AGENT_NAME="Docker Agent - Linux" --name "azp-agent-linux" azp-agent:linux
Kapsayıcıyı durdurmak ve ajanı kaldırmak istiyorsanız, --interactive ve --tty bayraklarını (ya da basitçe -it) belirtmeniz gerekebilir Ctrl + C.
docker run --interactive --tty < . . . >
Her işlem hattı işi için yeni bir aracı kapsayıcısı istiyorsanız, --once komutunuza iletin.
docker run < . . . > --once
--once bayrağıyla, görev tamamlandığında kapsayıcının yeni bir kopyasını başlatmak için Kubernetes veya Azure Container Instances gibi bir kapsayıcı düzenleme sistemi kullanmak isteyebilirsiniz.
İsteğe bağlı ortam değişkenlerini kullanarak aracı adını, aracı havuzunu ve aracı iş dizinini denetleyebilirsiniz.
Ortam değişkenleri
| Ortam değişkeni | Açıklama |
|---|---|
| AZP_URL | Azure DevOps veya Azure DevOps Server örneğinin URL'si. |
| AZP_TOKEN | kişisel erişim belirteci (PAT) |
| AZP_CLIENTID | Hizmet sorumlusu istemci kimliği |
| AZP_CLIENTSECRET | Hizmet ilkesi istemci sırrı |
| AZP_TENANTID | Hizmet sorumlusu kiracı kimliği |
| AZP_AGENT_NAME | Aracı adı (varsayılan değer: kapsayıcı konak adı). |
| AZP_POOL | Aracı havuzu adı (varsayılan değer: Default). |
| AZP_WORK | İş dizini (varsayılan değer: _work). |
Kimlik doğrulama
Aşağıdakilerden biri gereklidir:
- PAT kullanıyorsanız:
AZP_TOKEN - Hizmet ilkesi kullanıyorsanız:
AZP_CLIENTID,AZP_CLIENTSECRETveAZP_TENANTID
İzin
Jetonun veya hizmet sorumlusunun, Kuruluş seviyesinde AZP_URL kapsamı olmalıdır. PAT kullanıyorsanız, belirtecin aracıları yapılandırmaizni olan bir kullanıcı tarafından oluşturulması gerekir.
Araçları ekleyin ve kapsayıcıyı özelleştirin
Temel bir build ajanı oluşturdunuz. Dockerfile'ı ek araçları ve bağımlılıklarını içerecek şekilde genişletebilir veya bunu temel katman olarak kullanarak kendi kapsayıcınızı oluşturabilirsiniz. Yalnızca aşağıdakilerin dokunulmadığından emin olun:
- Betik
start.shDockerfile tarafından çağrılır. - The script is the last command in the Dockerfile.
start.shbetik, Dockerfile'daki son komuttur. - Türev kapsayıcıların Dockerfile tarafından belirtilen bağımlılıklardan hiçbirini kaldırmadığından emin olun.
Docker kapsayıcısı içinde Docker kullanma
Docker'ı bir Docker kapsayıcısının içinden kullanmak için Docker yuvasını bağlamanız gerekir.
Dikkat
Bunu yapmanın ciddi güvenlik etkileri vardır. Kapsayıcının içindeki kod artık Docker konağınızda kök olarak çalıştırılabilir.
Bunu yapmak istediğinizden eminseniz Docker.com bağlama belgelerine bakın.
Azure Kubernetes Service kümesini kullanma
Dikkat
Docker kısıtlaması nedeniyle docker tabanlı görevlerin AKS 1.19 veya sonraki sürümlerinde çalışmayacağını lütfen göz önünde bulundurun. Docker, Kubernetes 1.19'da kapsayıcılı olarak değiştirildi ve Docker-in-Docker kullanılamaz hale geldi.
Azure Kubernetes Service'i dağıtma ve yapılandırma
Hızlı Başlangıç: Azure portalını kullanarak Azure Kubernetes Service (AKS) kümesi dağıtma altındaki adımları izleyin. Bundan sonra, PowerShell veya Kabuk konsolunuz kubectl komut satırını kullanabilir.
Azure Container Registry'yi dağıtma ve yapılandırma
Hızlı Başlangıç: Azure portalını kullanarak Azure kapsayıcı kayıt defteri oluşturma'daki adımları izleyin. Bundan sonra Azure Container Registry'den kapsayıcıları gönderip çekebilirsiniz.
Gizli verileri yapılandırın ve çoğaltma kümesi dağıtın
AKS kümesindeki gizli bilgileri oluşturun.
kubectl create secret generic azdevops \ --from-literal=AZP_URL=https://dev.azure.com/yourOrg \ --from-literal=AZP_TOKEN=YourPAT \ --from-literal=AZP_POOL=NameOfYourPoolKapsayıcınızı Container Registry'ye göndermek için şu komutu çalıştırın:
docker push "<acr-server>/azp-agent:<tag>"Mevcut AKS kümeleri için Container Registry tümleştirmesini yapılandırın.
Not (mesaj/derece)
Azure portalında birden çok aboneliğiniz varsa lütfen önce bu komutu kullanarak bir abonelik seçin
az account set --subscription "<subscription id or subscription name>"az aks update -n "<myAKSCluster>" -g "<myResourceGroup>" --attach-acr "<acr-name>"Aşağıdaki içeriği 'ye
~/AKS/ReplicationController.ymlkaydedin:apiVersion: apps/v1 kind: Deployment metadata: name: azdevops-deployment labels: app: azdevops-agent spec: replicas: 1 # here is the configuration for the actual agent always running selector: matchLabels: app: azdevops-agent template: metadata: labels: app: azdevops-agent spec: containers: - name: kubepodcreation image: <acr-server>/azp-agent:<tag> env: - name: AZP_URL valueFrom: secretKeyRef: name: azdevops key: AZP_URL - name: AZP_TOKEN valueFrom: secretKeyRef: name: azdevops key: AZP_TOKEN - name: AZP_POOL valueFrom: secretKeyRef: name: azdevops key: AZP_POOL volumeMounts: - mountPath: /var/run/docker.sock name: docker-volume volumes: - name: docker-volume hostPath: path: /var/run/docker.sockBu Kubernetes YAML dosyası,
replicas: 1ile kümede çalışan ajanların sayısını gösteren bir çoğaltma kümesi ve bir dağıtım oluşturur.Şu komutu çalıştırın:
kubectl apply -f ReplicationController.yml
Artık ajanlarınız AKS kümesini çalıştıracak.
Özel MTU parametresini ayarlama
Kapsayıcı işleri tarafından kullanılan ağlar için MTU değeri belirtmeye izin verin (k8s kümesindeki docker-in-docker senaryoları için kullanışlıdır).
MTU değerini ayarlamak için AGENT_DOCKER_MTU_VALUE isimli ortam değişkenini belirlemeniz ve ardından kendinden barındırılan aracı yeniden başlatmanız gerekir. Aracı yeniden başlatma hakkında daha fazla bilgiye buradan ve her bir aracı için farklı ortam değişkenleri ayarlama hakkında burada bulabilirsiniz.
Bu, iş kapsayıcısı için bir ağ parametresi ayarlamanıza olanak tanır. Bu komutun kullanılması, kapsayıcı ağ yapılandırması sırasında sonraki komutun kullanımına benzer:
-o com.docker.network.driver.mtu=AGENT_DOCKER_MTU_VALUE
Docker kapsayıcısı içinde Docker kullanarak birimleri monte etme
Docker kapsayıcısı başka bir Docker kapsayıcısı içinde çalışıyorsa, her ikisi de konağın daemon'unu kullanır, bu nedenle tüm bağlama yolları kapsayıcıya değil konağa başvurur.
Örneğin, ana bilgisayardan dış Docker kapsayıcısına bir yolu bağlamak istiyorsak şu komutu kullanabiliriz:
docker run ... -v "<path-on-host>:<path-on-outer-container>" ...
Ana bilgisayardan iç Docker kapsayıcısına bir yolu eklemek istiyorsak, şu komutu kullanabiliriz:
docker run ... -v "<path-on-host>:<path-on-inner-container>" ...
Ancak dış kapsayıcıdaki yolları iç kapsayıcıya bağlayamıyoruz; bu sorunu çözmek için bir ENV değişkeni bildirmemiz gerekir:
docker run ... --env DIND_USER_HOME=$HOME ...
Bundan sonra, şu komutu kullanarak iç kapsayıcıyı dış kapsayıcıdan başlatabiliriz:
docker run ... -v "${DIND_USER_HOME}:<path-on-inner-container>" ...
Sık karşılaşılan hatalar
Windows kullanıyorsanız ve aşağıdaki hatayı alırsanız:
standard_init_linux.go:178: exec user process caused "no such file or directory"
Git-scm dosyasını indirip yükleyerek Git Bash'i yükleyin.
Şu komutu çalıştırın:
dos2unix ~/azp-agent-in-docker/Dockerfile
dos2unix ~/azp-agent-in-docker/start.sh
git add .
git commit -m "Fixed CR"
git push
Yeniden deneyin. Artık hatayı alamayacaksınız.