Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Azure DevOps Szolgáltatások | Azure DevOps Server | Azure DevOps Server 2022
Ez a cikk az Azure Pipelines tárolófeladatait ismerteti. A tárolók egyszerű absztrakciók a gazdagép operációs rendszeréből, amelyek biztosítják a feladatok adott környezetben való futtatásához szükséges összes elemet.
Alapértelmezés szerint az Azure Pipelines-feladatok közvetlenül a gazdagépeken telepített ügynökökön futnak. Az üzemeltetett ügynökfeladatok kényelmesek, kevés kezdeti telepítést vagy infrastruktúra-karbantartást igényelnek, és jól használhatók alapszintű projektekhez. A feladatkörnyezet további szabályozásához definiálhat és futtathat folyamatfeladatokat tárolókban, hogy pontos verziójú operációs rendszereket, eszközöket és függőségeket kapjon.
Tárolófeladat esetén az ügynök először lekéri és elindítja a tárolót, majd futtatja a feladat minden lépését a tárolón belül. Ha az egyes buildelési lépések részletesebb szabályozására van szüksége, a lépéscélok használatával minden lépéshez kiválaszthat egy tárolót vagy gazdagépet.
Konténerfeladatokra vonatkozó követelmények
- YAML-alapú folyamat. A klasszikus folyamatok nem támogatják a konténerfeladatokat.
- Windows vagy Ubuntu által üzemeltetett ügynök. A MacOS-ügynökök nem támogatják a tárolókat. Nem Ubuntu Linux-ügynökök használatához lásd: Nonglibc-alapú tárolók.
- A Docker telepítve van az ügynökön, és engedéllyel rendelkezik a Docker démon eléréséhez.
- Az ügynök közvetlenül a gazdagépen fut, nem már egy tárolóban. A beágyazott tárolók nem támogatottak.
A Linux-alapú tárolókra a következő követelmények vonatkoznak:
- A Bash telepítve van.
- GNU C-kódtár (
glibc)-alapú. A Nonglibc-tárolókhoz további beállításokra van szükség. További információ: Nonglibc-alapú tárolók. - Nem
ENTRYPOINT. Előfordulhat, hogy a tárolókENTRYPOINTnem működnek, mert a Docker Exec elvárja, hogy a tároló mindig futjon. -
USERhozzáféréssel rendelkezikgroupaddés más emelt szintű parancsokhoz anélkül, hogysudo-t használna. - Az ügynök által biztosított Node.jsfuttatásának képessége.
Feljegyzés
Node.js a Windows-gazdagépeken futó Linux-tárolókhoz előre telepítve kell lennie.
Néhány lecsupaszított tároló, amely elérhető a Docker Hubon, különösen az Alpine Linuxon alapuló tárolók, nem felelnek meg ezeknek a követelményeknek. További információ: Nonglibc-alapú tárolók.
Egyedi munka
Az alábbi példa egy windowsos vagy linuxos egyfeladatos tárolót határoz meg.
Ez a példa arra utasítja a rendszert, hogy kérje le a ubuntu18.04 címkézett lemezképet, majd indítsa el a tárolót. A printenv parancs a ubuntu:18.04 tárolóban fut.
pool:
vmImage: 'ubuntu-latest'
container: ubuntu:18.04
steps:
- script: printenv
Több feladat
A tárolók használatával ugyanazt a lépést több feladatban is futtathatja. Az alábbi példa ugyanazt a lépést futtatja az Ubuntu Linux több verziójában. Nem kell használnia a jobs kulcsszót, mert 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
Több feladat egyetlen ügynök gazdagépén
A tárolófeladat a mögöttes gazdagépügynök Docker-konfigurációs fájlját használja a rendszerkép-beállításjegyzék engedélyezéséhez. Ez a fájl a Docker-beállításjegyzék-tároló inicializálásának végén jelentkezik ki.
A tárolófeladatok beállításjegyzék-rendszerképeinek lekérése megtagadható jogosulatlan hitelesítés esetén, ha az ügynökön párhuzamosan futó másik feladat már kijelentkeztette a Docker-konfigurációs fájlt. A megoldás az, hogy a Docker-környezeti változók közé beállítunk egyet az üzemeltetett ügynökön futó minden ügynökkészlet számára DOCKER_CONFIG néven.
Exportálja a DOCKER_CONFIG minden ügynökkészlet runsvc.sh szkriptjébe az alábbiak szerint:
export DOCKER_CONFIG=./.docker
Indítási beállítások
A tulajdonság használatával megadhatja a options tárolóindítási beállításokat.
container:
image: ubuntu:18.04
options: --hostname container-test --ip 192.168.0.1
steps:
- script: echo hello
Futtassa a docker create --help parancsot a Docker meghívásának átadható beállítások listájának megtekintéséhez. Nem minden beállítás garantáltan működik az Azure Pipelines szolgáltatással. Először ellenőrizze, hogy használhat-e tulajdonságot container ugyanahhoz a célra.
További információkért tekintse meg a docker-tároló létrehozási parancsreferenciáját és a resources.containers.container definícióját az Azure Pipelines YAML-sémareferenciájában.
Docker-szoftvercsatornák leképezése
Az Ügynök 5.279.0-s verziójától kezdve a Linux-ügynökök tárolófeladatai alapértelmezés szerint nem csatlakoztatják a gazda Docker-szoftvercsatornát (/var/run/docker.sock) a feladattárolóba. Ez az alapértelmezett beállítás a minimális jogosultság elvét követi, így azok a feladatok, amelyek nem igényelnek Docker-in-container viselkedést, nem kapnak hozzáférést a gazdagép Docker démonához.
Ha a tárolófeladat Docker-parancsokat futtat a gazdagép démonja ellen (Docker-in-container), ezt kifejezetten engedélyezze úgy, hogy a tárolóerőforráson a(z) mapDockerSocket értékét true értékre állítja.
resources:
containers:
- container: my_container
image: ubuntu:22.04
mapDockerSocket: true
Nagyszabású üzembe helyezések esetén, ahol nem praktikus mindenhol frissíteni a YAML-t, ideiglenesen beállíthatja az ügynökgazda AZP_AGENT_DEFAULT_MAP_DOCKER_SOCKET_TO_FALSE=false környezeti változóját az előző alapértelmezett működés visszaállításához, amelyben a Linux-tárolófeladatok a /var/run/docker.sock értékre képeződnek le, kivéve, ha a mapDockerSocket kifejezetten konfigurálva van. Ezt a beállítást csak rövid távú kerülőmegoldásként használja, mivel alapértelmezés szerint újraengedélyezi a Docker-socket leképezését.
Caution
A Docker-szoftvercsatornák leképezése komoly biztonsági következményekkel jár. A tárolóban lévő kód gyökérként futtatható a Docker-gazdagépen. Csak akkor állítsa be mapDockerSocket: true , ha a feladat docker-in-container viselkedést igényel.
Újrafelhasználható tárolódefiníció
Az alábbi YAML-példa a szakaszban szereplő tárolókat resources határozza meg, majd a hozzájuk rendelt aliasok alapján hivatkozik rájuk. A jobs kulcsszót a rendszer az egyértelműség kedvéért használja.
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
Szolgáltatásvégpontok
A nyilvános Docker Hubon kívül más regisztrációs adatbázisokban is üzemeltethet tárolókat. 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, adjon hozzá egy szolgáltatáskapcsolatot a beállításjegyzék eléréséhez. Ezután hivatkozhat a végpontra a tárolódefinícióban.
Privát Docker Hub-kapcsolat:
container:
image: registry:ubuntu1804
endpoint: private_dockerhub_connection
Azure Container Registry-kapcsolat:
container:
image: myprivate.azurecr.io/windowsservercore:1803
endpoint: my_acr_connection
Feljegyzés
Az Azure Pipelines nem tud szolgáltatáskapcsolatot beállítani az Amazon Elastic Container Registryhez (ECR), mert az Amazon ECR más ügyféleszközökre is szükség van ahhoz, hogy az Amazon Web Services (AWS) hitelesítő adatai használhatóak legyenek a Docker-hitelesítéshez.
Glibc nélküli tárolók
Az üzemeltetett Azure Pipelines-ügynökök Node.jsszolgáltatnak, amely a feladatok és szkriptek futtatásához szükséges. A Node.js verzió általában a felhőben használt glibc C-futtatókörnyezetre fordul. Egyes Linux-változatok más C futtatókörnyezeteket használnak. Az Alpine Linux például a musl-t használ. További információ: Microsoft által üzemeltetett ügynökök.
Ha nem glibc-alapú konténert szeretne használni egy folyamatláncban, a következők szerint kell eljárnia:
- Adja meg saját Node.js másolatát.
- Adjon hozzá egy címkét a képhez, amely a Node.js bináris fájl helyére mutat.
- Adja meg az
bash,sudo,whichésgroupaddaz Azure Pipelines függőségeit.
Saját Node.js
Ha nemglibc-alapú tárolót használ, csomópont bináris fájlt kell hozzáadnia a tárolóhoz. Node.js 18 biztonságos választás. Kezdje a node:18-alpine képről.
Irányítsa az ügynököt a Node.js-hez
Az ügynök felolvassa a tárolócímkét "com.azure.dev.pipelines.handler.node.path". 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épen node:18-alpinea következő sor hozzáadása a Dockerfile-hoz:
LABEL "com.azure.dev.pipelines.agent.handler.node.path"="/usr/local/bin/node"
Szükséges csomagok hozzáadása
Az Azure Pipelines megköveteli, hogy egy Bash-alapú rendszer általános felügyeleti csomagokkal rendelkezzen. Az Alpine Linux nem rendelkezik több szükséges csomaggal. Telepítse bash, sudo, és shadow, és fedezze az alapvető igényeket.
RUN apk add bash sudo shadow
Ha bármilyen beépített vagy Marketplace-feladattól függ, adja meg a szükséges bináris fájlokat is.
Teljes Dockerfile-példa
FROM node:18-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" ]