Szolgáltatástárolók
Azure DevOps Services
Ha a folyamathoz egy vagy több szolgáltatás támogatása szükséges, sok esetben feladatonként létre kell hoznia, csatlakoznia és törölnie kell az egyes szolgáltatásokat. Egy folyamat például olyan integrációs teszteket futtathat, amelyek hozzáférést igényelnek egy adatbázishoz és egy memória-gyorsítótárhoz. Az adatbázist és a memória-gyorsítótárat a folyamat minden egyes feladatához frissen létre kell hozni.
A tárolókkal egyszerűen és hordozható módon futtathat olyan szolgáltatásokat, amelyektől a folyamat függ. A szolgáltatástároló lehetővé teszi a tárolóalapú szolgáltatás automatikus létrehozását, hálózathoz csatlakoztatását és az életciklusának a kezelését. Az egyes szolgáltatástárolókat csak a tárolót igénylő feladat érheti el. A szolgáltatástárolók bármilyen típusú feladattal használhatók, de a leggyakrabban tárolófeladatokhoz használják őket.
Követelmények
A szolgáltatástárolóknak meg kell határozniuk egy vagy ENTRYPOINT
.CMD
A folyamat további argumentumok nélkül fog futni docker run
a megadott tárolóhoz.
Az Azure Pipelines Linux- vagy Windows-tárolókat futtathat. Használja a linuxos tárolókhoz üzemeltetett Ubuntu-t vagy a Windows-tárolók üzemeltetett Windows-tárolókészletét. (A üzemeltetett macOS-készlet nem támogatja a tárolók futtatását.)
Egytárolós feladat
Egy egyszerű példa a tárolófeladatok használatára:
resources:
containers:
- container: my_container
image: buildpack-deps:focal
- container: nginx
image: nginx
pool:
vmImage: 'ubuntu-latest'
container: my_container
services:
nginx: nginx
steps:
- script: |
curl nginx
displayName: Show that nginx is running
Ez a folyamat lekéri a és buildpack-deps
a tárolókat Docker Hubnginx
, majd elindítja a tárolókat. A tárolók együtt vannak hálózatban, hogy a nevük alapján services
elérhessék egymást.
Ebben a feladattárolóban a gazdagép neve a nginx
Docker hálózatkezelésével a megfelelő szolgáltatásokra lesz feloldva.
A hálózat összes tárolója automatikusan elérhetővé teszi az összes portot egymásnak.
Egyetlen feladat
A szolgáltatástárolókat feladattároló nélkül is használhatja. Egy egyszerű példa:
resources:
containers:
- container: nginx
image: nginx
ports:
- 8080:80
env:
NGINX_PORT: 80
- container: redis
image: redis
ports:
- 6379
pool:
vmImage: 'ubuntu-latest'
services:
nginx: nginx
redis: redis
steps:
- script: |
curl localhost:8080
echo $AGENT_SERVICES_REDIS_PORTS_6379
Ez a folyamat elindítja a legújabb nginx
tárolókat. Mivel a feladat nem tárolóban fut, nincs automatikus névfeloldás.
Ez a példa bemutatja, hogyan érheti el a szolgáltatásokat a használatával localhost
.
A fenti példában explicit módon biztosítjuk a portot (például 8080:80
).
Alternatív módszerként lehetővé kell tenni, hogy egy véletlenszerű port dinamikusan legyen hozzárendelve futásidőben. Ezeket a dinamikus portokat ezután változók használatával érheti el.
Egy Bash-szkriptben a folyamatkörnyezet használatával érhet el egy változót. Ezek a változók a következő formában jelennek meg: agent.services.<serviceName>.ports.<port>
.
A fenti példában redis
egy véletlenszerűen elérhető port van hozzárendelve a gazdagépen.
A agent.services.redis.ports.6379
változó tartalmazza a portszámot.
Több feladat
A szolgáltatástárolók akkor is hasznosak, ha ugyanazon szolgáltatás több verzióján futtatják ugyanazokat a lépéseket. Az alábbi példában ugyanezek a lépések a PostgreSQL több verzióján futnak.
resources:
containers:
- container: my_container
image: ubuntu:22.04
- container: pg15
image: postgres:15
- container: pg14
image: postgres:14
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
postgres15:
postgresService: pg15
postgres14:
postgresService: pg14
container: my_container
services:
postgres: $[ variables['postgresService'] ]
steps:
- script: printenv
Portok
Tárolóerőforrás vagy beágyazott tároló megadásakor megadhatja a tárolón közzéteendő tömböt ports
.
resources:
containers:
- container: my_service
image: my_service:latest
ports:
- 8080:80
- 5432
services:
redis:
image: redis
ports:
- 6379/tcp
A beállítás ports
nem szükséges, ha a feladat tárolóban fut, mert az ugyanazon Docker-hálózaton lévő tárolók alapértelmezés szerint automatikusan elérhetővé teszik az összes portot egymásnak.
Ha a feladat a gazdagépen fut, akkor ports
a szolgáltatás eléréséhez szükséges. A portok formátuma <hostPort>:<containerPort>
vagy csak <containerPort>
, és a végén egy nem kötelező/<protocol>
, például 6379/tcp
a porton 6379
keresztüli elérhetővé tétel tcp
szerepel, amely a gazdagép egy véletlenszerű portjához van kötve.
A gazdagép véletlenszerű portjához kötött portok esetében a folyamat létrehozza az űrlap agent.services.<serviceName>.ports.<port>
változóját, hogy a feladat elérhesse. Feloldja például agent.services.redis.ports.6379
a gazdagép véletlenszerűen hozzárendelt portját.
Kötetek
A kötetek hasznosak az adatok szolgáltatások közötti megosztásához vagy a feladatok több futtatása közötti adatmegőrzéshez.
A kötetcsatlakoztatásokat a tömbjeként volumes
adhatja meg. A kötetek lehetnek Docker-kötetek, névtelen Docker-kötetek vagy kötési csatlakoztatások a gazdagépen.
services:
my_service:
image: myservice:latest
volumes:
- mydockervolume:/data/dir
- /data/dir
- /src/dir:/dst/dir
A kötetek formátuma <source>:<destinationPath>
, ahol <source>
lehet egy elnevezett kötet vagy egy abszolút elérési út a gazdagépen, és <destinationPath>
abszolút elérési út a tárolóban.
Megjegyzés
Ha az üzemeltetett készleteket használja, akkor a kötetek nem maradnak meg a feladatok között, mert a gazdagép a feladat befejezése után törlődik.
Egyéb lehetőségek
A szolgáltatástárolók ugyanazokon a tárolóerőforrásokon osztoznak, mint a tárolófeladatok. Ez azt jelenti, hogy ugyanazokat a további lehetőségeket használhatja.
Állapotellenőrzés
Ha bármelyik szolgáltatástároló állapotellenőrzést ad meg, az ügynök megvárja, amíg a tároló kifogástalan állapotú lesz a feladat futtatása előtt.
Több tároló például szolgáltatásokkal
Ebben a példában van egy Django Python-webtároló, amely két adatbázistárolóhoz csatlakozik: a PostgreSQL-hez és a MySQL-hez. A PostgreSQL-adatbázis az elsődleges adatbázis, és a tároló neve db
. A db
tároló kötetet /data/db:/var/lib/postgresql/data
használ, és három adatbázisváltozó van átadva a tárolónak a segítségével env
. A mysql
tároló portot 3306:3306
használ, és vannak olyan adatbázisváltozók is, amelyeken keresztül továbbítva env
van. A web
tároló nyitva van a porttal 8000
. A lépésekben telepítse a függőségeket, pip
majd futtassa a Django-tesztet. Ha be szeretne állítani egy működő példát, szüksége lesz egy Django-webhelyre, amely két adatbázissal rendelkezik. Ez a példa feltételezi, hogy a manage.py
fájl a gyökérkönyvtárban van, és a Django-projekt az adott könyvtárban található. Előfordulhat, hogy frissítenie kell az elérési utat a /__w/1/s/
fájlban /__w/1/s/manage.py test
.
resources:
containers:
- container: db
image: postgres
volumes:
- '/data/db:/var/lib/postgresql/data'
env:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
- container: mysql
image: 'mysql:5.7'
ports:
- '3306:3306'
env:
MYSQL_DATABASE: users
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
MYSQL_ROOT_PASSWORD: mysql
- container: web
image: python
volumes:
- '/code'
ports:
- '8000:8000'
pool:
vmImage: 'ubuntu-latest'
container: web
services:
db: db
mysql: mysql
steps:
- script: |
pip install django
pip install psycopg2
pip install mysqlclient
displayName: set up django
- script: |
python /__w/1/s/manage.py test
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: