Übersicht
Verwende jobs.<job_id>.container
, um einen Container zu erstellen, in dem alle Schritte eines Jobs ausgeführt werden, die noch keinen Container angeben. Wenn ein Schritt sowohl Skript- als auch Container-Aktionen umfasst, werden die Container-Aktionen als nebengeordnete Container in demselben Netzwerk mit denselben Volume-Mounts ausgeführt.
Wenn du keinen container
festlegst, werden alle Schritte direkt auf dem durch runs-on
angegebenen Host ausgeführt, es sei denn, ein Schritt bezieht sich auf eine Aktion, die für die Ausführung in einem Container konfiguriert ist.
Note
Die Standardshell für run
-Schritte innerhalb eines Containers lautet sh
anstatt bash
. Dies kann mit jobs.<job_id>.defaults.run
oder jobs.<job_id>.steps[*].shell
überschrieben werden.
Beispiel: Ausführen eines Auftrags innerhalb eines Containers
name: CI on: push: branches: [ main ] jobs: container-test-job: runs-on: ubuntu-latest container: image: node:18 env: NODE_ENV: development ports: - 80 volumes: - my_docker_volume:/volume_mount options: --cpus 1 steps: - name: Check for dockerenv file run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)
name: CI
on:
push:
branches: [ main ]
jobs:
container-test-job:
runs-on: ubuntu-latest
container:
image: node:18
env:
NODE_ENV: development
ports:
- 80
volumes:
- my_docker_volume:/volume_mount
options: --cpus 1
steps:
- name: Check for dockerenv file
run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)
Wenn du nur ein Containerimage angibst, kannst du das image
-Schlüsselwort weglassen.
jobs:
container-test-job:
runs-on: ubuntu-latest
container: node:18
Definieren des Containerimages
Verwende jobs.<job_id>.container.image
, um das Docker-Image zu definieren, das beim Ausführen der Aktion als Container herangezogen wird. Der Wert kann der Name des Docker Hub-Images oder ein Registrierungsname sein.
Definieren der Anmeldeinformationen für eine Containerregistrierung
Wenn die Containerregistrierung des Images eine Authentifizierung benötigt, damit das Image gepullt werden kann, kannst du mit jobs.<job_id>.container.credentials
eine map
von username
und password
festlegen. Die Anmeldeinformationen sind dieselben Werte, die du für den docker login
-Befehl angeben würdest.
Beispiel: Definieren der Anmeldeinformationen für eine Containerregistrierung
container:
image: ghcr.io/owner/image
credentials:
username: ${{ github.actor }}
password: ${{ secrets.github_token }}
Verwenden von Umgebungsvariablen mit einem Container
Verwende jobs.<job_id>.container.env
, um eine map
von Umgebungsvariablen im Dienstcontainer einzustellen.
Offenlegen von Netzwerkports auf einem Container
Verwende jobs.<job_id>.container.ports
zum Festlegen eines array
aus Ports, die für den Container verfügbar gemacht werden sollen.
Einbinden von Volumes in einem Container
Verwende jobs.<job_id>.container.volumes
zum Festlegen eines array
von Volumes, die der Container verwenden soll. Mithilfe von Volumes kannst Du Daten zwischen Diensten oder anderen Schritten in einem Job austauschen. Du kannst benannte Docker-Volumes, anonyme Docker-Volumes oder Bind-Mounts auf dem Host angegeben.
Um ein Volume festzulegen, gibst du den Quell- und Zielpfad an:
<source>:<destinationPath>
.
<source>
ist ein Volumename oder ein absoluter Pfad auf dem Hostcomputer, und <destinationPath>
ist ein absoluter Pfad im Container.
Beispiel: Einbinden von Volumes in einem Container
volumes:
- my_docker_volume:/volume_mount
- /data/my_data
- /source/directory:/destination/directory
Festlegen von Containerressourcenoptionen
Verwende jobs.<job_id>.container.options
zum Konfigurieren zusätzlicher Optionen für Docker-Containerressourcen. Eine Liste der Optionen findest du unter docker create
-Optionen.
Warning
Die Optionen --network
und --entrypoint
werden nicht unterstützt.