Tárolófeladatok definiálása (YAML)
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Alapértelmezés szerint a feladatok azon a gazdagépen futnak, amelyen az ügynök telepítve van. Ez kényelmes és általában jól használható az Azure Pipelines bevezetésének első szakaszában megkezdett projektekhez. Idővel előfordulhat, hogy jobban szeretné szabályozni azt a környezetet, amelyben a tevékenységek futnak. A YAML-folyamatok tárolófeladatokat kínálnak ehhez a vezérlési szinthez.
Linux- és Windows-ügynökökön a feladatok futtathatók a gazdagépen vagy egy tárolóban. (MacOS és Red Hat Enterprise Linux 6 rendszeren a tárolófeladatok nem érhetők el.) A tárolók elkülönítést biztosítanak a gazdagéptől, és lehetővé teszik az eszközök és függőségek meghatározott verzióinak rögzítését. A gazdagépfeladatok karbantartásához kevesebb kezdeti beállításra és infrastruktúrára van szükség.
A tárolók egyszerű absztrakciót biztosítanak a gazdagép operációs rendszere felett. Kiválaszthatja az operációs rendszerek, eszközök és függőségek pontos verzióit, amelyekre a buildnek szüksége van. Amikor megad egy tárolót a folyamatban, az ügynök először beolvassa és elindítja a tárolót. Ezután a feladat minden lépése a tárolóban fog futni. Beágyazott tárolók nem lehetnek. A tárolók nem támogatottak, ha egy ügynök már fut egy tárolón belül.
Ha az egyes lépések szintjén részletes vezérlésre van szüksége, a lépéscélok lehetővé teszik, hogy minden lépéshez tárolót vagy gazdagépet válasszon.
Követelmények
Linux-alapú tárolók
Az Azure Pipelines-rendszer néhány dolgot igényel Linux-alapú tárolókban:
- Bash
- glibc-alapú
- Futtathat Node.js (amelyet az ügynök biztosít)
- Nem határoz meg
ENTRYPOINT
USER
hozzáféréssel és egyéb jogosultsági parancsokkal rendelkezik anélkül, hogygroupadd
sudo
És az ügynök gazdagépén:
- Győződjön meg arról, hogy a Docker telepítve van
- Az ügynöknek engedéllyel kell rendelkeznie a Docker démon eléréséhez
Győződjön meg arról, hogy a tárolóban elérhetőek ezek az eszközök. A Docker Hubon elérhető lecsupaszított tárolók némelyike, különösen az Alpine Linuxon alapuló tárolók némelyike nem felel meg ezeknek a minimális követelményeknek. Előfordulhat, hogy a tárolók ENTRYPOINT
nem működnek, mivel az Azure Pipelines egy várakozó tárolót és docker exec
egy parancssorozatot fog docker create
létrehozni, amely arra számít, hogy a tároló mindig működik.
Feljegyzés
Windows-alapú Linux-tárolók esetén Node.js előre telepíteni kell.
Windows-tárolók
Az Azure Pipelines Windows-tárolókat is futtathat. A Windows Server 1803-es vagy újabb verziójára van szükség. A Dockert telepíteni kell. Győződjön meg arról, hogy a folyamatügynök rendelkezik engedéllyel a Docker-démon eléréséhez.
A Windows-tárolónak támogatnia kell a Node.js futtatását. A Csomópont futtatásához szükséges függőségek hiányoznak egy alap Windows Nano Server-tárolóból.
Saját ügynökök
Csak windows-2019
a ubuntu-*
rendszerképek támogatják a tárolók futtatását.
A macOS rendszerkép nem támogatja a tárolók futtatását.
Önálló feladat
Egy egyszerű példa:
pool:
vmImage: 'ubuntu-latest'
container: ubuntu:18.04
steps:
- script: printenv
Ez azt jelzi a rendszernek, hogy lekérje a ubuntu
Docker Hubról címkézett 18.04
rendszerképet, majd indítsa el a tárolót. Amikor a printenv
parancs fut, az a tárolóban ubuntu:18.04
történik.
Windows-példa:
pool:
vmImage: 'windows-2019'
container: mcr.microsoft.com/windows/servercore:ltsc2019
steps:
- script: set
Feljegyzés
A Windows megköveteli, hogy a gazdagép és a tároló kernelverziója egyezzen.
Mivel ez a példa a Windows 2019 rendszerképet használja, a 2019
tároló címkéjét fogjuk használni.
Több feladat
A tárolók akkor is hasznosak, ha ugyanazokat a lépéseket több feladatban is futtatják.
Az alábbi példában ugyanezek a lépések az Ubuntu Linux több verziójában futnak.
(És nem kell megemlítenünk a jobs
kulcsszót, mivel csak egyetlen feladat van definiálva.)
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
Végpontok
A tárolók nem nyilvános Docker Hub-regisztrációs adatbázisokon üzemeltethetők. Ha rendszerképet szeretne üzemeltetni az Azure Container Registryben vagy egy másik privát tárolóregisztrációs adatbázisban (beleértve egy privát Docker Hub-beállításjegyzéket is), adjon hozzá egy szolgáltatáskapcsolatot a privát beállításjegyzékhez. Ezután hivatkozhat rá egy tároló specifikációjában:
container:
image: registry:ubuntu1804
endpoint: private_dockerhub_connection
steps:
- script: echo hello
vagy
container:
image: myprivate.azurecr.io/windowsservercore:1803
endpoint: my_acr_connection
steps:
- script: echo hello
Más tárolóregisztrációs adatbázisok is működhetnek. Az Amazon ECR jelenleg nem működik, mivel más ügyféleszközökre is szükség van az AWS hitelesítő adatainak a Docker általi hitelesítéshez való átalakításához.
Feljegyzés
Az ügynök Red Hat Enterprise Linux 6 buildje nem futtat tárolófeladatot. Válasszon másik Linux-ízt, például Red Hat Enterprise Linux 7 vagy újabb verziót.
Beállítások
Ha szabályoznia kell a tárolóindítást, megadhatja options
.
container:
image: ubuntu:18.04
options: --hostname container-test --ip 192.168.0.1
steps:
- script: echo hello
A futtatás docker create --help
a Docker-meghívásnak átadható lehetőségek listáját tartalmazza. Ezek közül a lehetőségek közül nem minden garantáltan működik az Azure DevOpsszal. Először ellenőrizze, hogy használhat-e tárolótulajdonságot ugyanahhoz a célhoz. További információt a YAML-sémában és adocker create
parancshivatkozásban találresources.containers.container
.
Újrafelhasználható tárolódefiníció
Az alábbi példában a tárolók az erőforrások szakaszban vannak definiálva.
Ezután a rendszer később hivatkozik az egyes tárolókra a hozzárendelt aliasra hivatkozva.
(Itt explicit módon felsoroljuk a kulcsszót az jobs
egyértelműség kedvéért.)
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
Nem glibc-alapú tárolók
Az Azure Pipelines-ügynök biztosítja a Node.js egy példányát, amely a feladatok és szkriptek futtatásához szükséges. Az üzemeltetett ügynökhöz tartozó Node.js verziójának megtekintéséhez tekintse meg a Microsoft által üzemeltetett ügynököket. A Node.js verziója az üzemeltetett felhőben használt C-futtatókörnyezet alapján van lefordítva, általában glibc. A Linux egyes változatai más C futtatókörnyezeteket használnak. Az Alpine Linux például muslt használ.
Ha nem glibc-alapú tárolót szeretne feladattárolóként használni, néhány dolgot önállóan kell elrendeznie. Először meg kell adnia a saját Node.js másolatát. Másodszor, fel kell vennie egy címkét a képre, amely közli az ügynökkel, hogy hol található a Node.js bináris fájl. Végül, a stock Alpine nem jár más függőségekkel, amelyektől az Azure Pipelines függ: bash, sudo, amely és groupadd.
Saját Node.js
Ön a felelős azért, hogy csomópont bináris fájlt adjon hozzá a tárolóhoz.
A Node 18 biztonságos választás.
A képből node:18-alpine
indulhat ki.
Tájékoztassa az ügynököt a Node.js
Az ügynök felolvas egy "com.azure.dev.pipelines.handler.node.path" tárolócímkét.
Ha ez a címke létezik, akkor a Node.js bináris elérési útjának kell lennie.
Például egy képben, amely alapján node:18-alpine
, adja hozzá ezt a sort a Dockerfile-hoz:
LABEL "com.azure.dev.pipelines.agent.handler.node.path"="/usr/local/bin/node"
Követelmények hozzáadása
Az Azure Pipelines egy Bash-alapú rendszert feltételez, amelyen telepítve vannak a gyakori felügyeleti csomagok.
Az Alpine Linux különösen nem tartalmaz több szükséges csomagot.
Telepítés bash
, sudo
és shadow
az alapvető igényeket fogja kielégíteni.
RUN apk add bash sudo shadow
Ha bármilyen beépített vagy Marketplace-feladattól függ, meg kell adnia azokat a bináris fájlokat is, amelyekre szükségük van.
Teljes példa egy Dockerfile-ra
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" ]
Több feladat ügynökkészletekkel egyetlen üzemeltetett ügynökön
A tárolófeladat a mögöttes gazdaügynököt, a Docker-config.json használja a rendszerkép-beállításjegyzék-engedélyezéshez, amely a Docker-beállításjegyzék-tároló inicializálásának végén kijelentkezik. A rendszerképek későbbi lekéréses engedélyezése megtagadható a "jogosulatlan hitelesítés" miatt, mert a rendszerben a hitelesítéshez regisztrált Docker-config.json fájlt már kijelentkezteti az egyik másik, párhuzamosan futó tárolófeladat.
A megoldás az üzemeltetett ügynökön futó összes ügynökkészlet-szolgáltatásra jellemző Docker-környezeti változó DOCKER_CONFIG
beállítása. Exportálja az DOCKER_CONFIG
egyes ügynökkészletek runsvc.sh szkriptjét:
#insert anything to set up env when running as a service
export DOCKER_CONFIG=./.docker
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: