Using secrets with GitHub Actions
Un secret de construction est une information sensible, comme un mot de passe ou un jeton API, consommée dans le cadre du processus de construction. Docker Build supporte deux formes de secrets :
- Les montages secrets ajoutent des secrets comme fichiers
dans le conteneur de construction (sous
/run/secrets
par défaut). - Les montages SSH ajoutent des sockets d'agent SSH ou des clés dans le conteneur de construction.
Cette page montre comment utiliser les secrets avec GitHub Actions. Pour une introduction aux secrets en général, voir Secrets de construction.
Montages secrets
Dans l'exemple suivant, on utilise et expose le
secret GITHUB_TOKEN
fourni par GitHub dans votre workflow.
D'abord, créez un Dockerfile
qui utilise le secret :
# syntax=docker/dockerfile:1
FROM alpine
RUN --mount=type=secret,id=github_token,env=GITHUB_TOKEN ...
Dans cet exemple, le nom du secret est github_token
. Le workflow suivant
expose ce secret en utilisant l'entrée secrets
:
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build
uses: docker/build-push-action@v6
with:
platforms: linux/amd64,linux/arm64
tags: user/app:latest
secrets: |
"github_token=${{ secrets.GITHUB_TOKEN }}"
NoteVous pouvez également exposer un fichier secret à la construction avec l'entrée
secret-files
:secret-files: | "MY_SECRET=./secret.txt"
Si vous utilisez les secrets GitHub et avez besoin de gérer une valeur multi-ligne, vous devrez placer la paire clé-valeur entre guillemets :
secrets: |
"MYSECRET=${{ secrets.GPG_KEY }}"
GIT_AUTH_TOKEN=abcdefghi,jklmno=0123456789
"MYSECRET=aaaaaaaa
bbbbbbb
ccccccccc"
FOO=bar
"EMPTYLINE=aaaa
bbbb
ccc"
"JSON_SECRET={""key1"":""value1"",""key2"":""value2""}"
Clé | Valeur |
---|---|
MYSECRET |
*********************** |
GIT_AUTH_TOKEN |
abcdefghi,jklmno=0123456789 |
MYSECRET |
aaaaaaaa\nbbbbbbb\nccccccccc |
FOO |
bar |
EMPTYLINE |
aaaa\n\nbbbb\nccc |
JSON_SECRET |
{"key1":"value1","key2":"value2"} |
NoteLes doubles échappements sont nécessaires pour les guillemets.
Montages SSH
Les montages SSH vous permettent de vous authentifier avec des serveurs SSH.
Par exemple pour effectuer un git clone
, ou pour récupérer des packages
d'application depuis un dépôt privé.
L'exemple de Dockerfile suivant utilise un montage SSH pour récupérer des modules Go depuis un dépôt GitHub privé.
# syntax=docker/dockerfile:1
ARG GO_VERSION="1.24"
FROM golang:${GO_VERSION}-alpine AS base
ENV CGO_ENABLED=0
ENV GOPRIVATE="github.com/foo/*"
RUN apk add --no-cache file git rsync openssh-client
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
WORKDIR /src
FROM base AS vendor
# this step configure git and checks the ssh key is loaded
RUN --mount=type=ssh <<EOT
set -e
echo "Setting Git SSH protocol"
git config --global url."[email protected]:".insteadOf "https://github.com/"
(
set +e
ssh -T [email protected]
if [ ! "$?" = "1" ]; then
echo "No GitHub SSH key loaded exiting..."
exit 1
fi
)
EOT
# this one download go modules
RUN --mount=type=bind,target=. \
--mount=type=cache,target=/go/pkg/mod \
--mount=type=ssh \
go mod download -x
FROM vendor AS build
RUN --mount=type=bind,target=. \
--mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache \
go build ...
Pour construire ce Dockerfile, vous devez spécifier un montage SSH que le
constructeur peut utiliser dans les étapes avec --mount=type=ssh
.
Le workflow GitHub Action suivant utilise l'action tierce
MrSquaare/ssh-setup-action
pour amorcer la configuration SSH sur le runner
GitHub. L'action crée une clé privée définie par le secret GitHub Action
SSH_GITHUB_PPK
et l'ajoute au fichier socket de l'agent SSH à SSH_AUTH_SOCK
.
Le montage SSH dans l'étape de construction assume SSH_AUTH_SOCK
par défaut,
donc il n'est pas nécessaire de spécifier l'ID ou le chemin pour le socket de
l'agent SSH explicitement.
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up SSH
uses: MrSquaare/ssh-setup-action@2d028b70b5e397cf8314c6eaea229a6c3e34977a # v3.1.0
with:
host: github.com
private-key: ${{ secrets.SSH_GITHUB_PPK }}
private-key-name: github-ppk
- name: Build and push
uses: docker/build-push-action@v6
with:
ssh: default
push: true
tags: user/app:latest
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up SSH
uses: MrSquaare/ssh-setup-action@2d028b70b5e397cf8314c6eaea229a6c3e34977a # v3.1.0
with:
host: github.com
private-key: ${{ secrets.SSH_GITHUB_PPK }}
private-key-name: github-ppk
- name: Build
uses: docker/bake-action@v6
with:
set: |
*.ssh=default