Artifact Registry
1 - Présentation
Artifact Registry est le service unifié de Google Cloud pour stocker et gérer les artefacts de build.
2 - Types de repositories
| Type | Format | Usage |
|---|---|---|
| Docker | Container images | Containers |
| npm | JavaScript packages | Node.js |
| Maven | Java artifacts | Java/Kotlin |
| Python | Pip packages | Python |
| Apt | Debian packages | Linux |
| Yum | RPM packages | Linux |
| Go | Go modules | Go |
3 - Créer un repository
3.1 Repository Docker
# Créer un repo Docker
gcloud artifacts repositories create images \
--repository-format=docker \
--location=europe-west1 \
--description="Docker images"
# Lister les repos
gcloud artifacts repositories list --location=europe-west1
# Configurer Docker pour utiliser AR
gcloud auth configure-docker europe-west1-docker.pkg.dev
3.2 Repository npm
# Créer un repo npm
gcloud artifacts repositories create npm-packages \
--repository-format=npm \
--location=europe-west1 \
--description="npm packages"
3.3 Repository Python
# Créer un repo Python
gcloud artifacts repositories create python-packages \
--repository-format=python \
--location=europe-west1 \
--description="Python packages"
4 - Images Docker
4.1 Push une image
# Tag l'image
docker tag mon-app:latest \
europe-west1-docker.pkg.dev/mon-projet/images/mon-app:v1.0.0
# Push
docker push europe-west1-docker.pkg.dev/mon-projet/images/mon-app:v1.0.0
4.2 Pull une image
docker pull europe-west1-docker.pkg.dev/mon-projet/images/mon-app:v1.0.0
4.3 Dans Cloud Build
# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args:
- 'build'
- '-t'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:$COMMIT_SHA'
- '-t'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:latest'
- '.'
images:
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:$COMMIT_SHA'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:latest'
5 - npm Packages
5.1 Configuration .npmrc
# Générer la config
gcloud artifacts print-settings npm \
--project=mon-projet \
--repository=npm-packages \
--location=europe-west1
# .npmrc
@monorg:registry=https://europe-west1-npm.pkg.dev/mon-projet/npm-packages/
//europe-west1-npm.pkg.dev/mon-projet/npm-packages/:always-auth=true
5.2 Authentification
# Via gcloud (pour développement local)
npx google-artifactregistry-auth
# Ou via token
gcloud artifacts print-settings npm \
--scope=@monorg \
--project=mon-projet \
--repository=npm-packages \
--location=europe-west1 \
--json-key=service-account.json
5.3 Publier un package
npm publish
5.4 Dans Cloud Build
steps:
- name: 'gcr.io/cloud-builders/npm'
args: ['ci']
- name: 'gcr.io/cloud-builders/npm'
args: ['publish']
env:
- 'NPM_TOKEN=${_NPM_TOKEN}'
6 - Python Packages
6.1 Configuration pip
# Générer la config
gcloud artifacts print-settings python \
--project=mon-projet \
--repository=python-packages \
--location=europe-west1
6.2 pip.conf
[global]
extra-index-url = https://europe-west1-python.pkg.dev/mon-projet/python-packages/simple/
6.3 Publier avec twine
# Installer twine
pip install twine
# Build
python setup.py sdist bdist_wheel
# Publier
twine upload --repository-url \
https://europe-west1-python.pkg.dev/mon-projet/python-packages/ \
dist/*
7 - Vulnerability Scanning
7.1 Activer le scanning
# Activer l'API Container Analysis
gcloud services enable containeranalysis.googleapis.com
# Le scanning est automatique pour les images Docker
7.2 Voir les vulnérabilités
# Via CLI
gcloud artifacts docker images list \
europe-west1-docker.pkg.dev/mon-projet/images \
--show-occurrences
# Détails d'une image
gcloud artifacts docker images describe \
europe-west1-docker.pkg.dev/mon-projet/images/app:v1.0.0 \
--show-all-metadata
7.3 Bloquer les images vulnérables
# Dans GKE avec Binary Authorization
apiVersion: binaryauthorization.google.com/v1
kind: Policy
spec:
defaultAdmissionRule:
evaluationMode: REQUIRE_ATTESTATION
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
8 - Cleanup Policies
8.1 Configurer la rétention
# Créer une policy de cleanup
gcloud artifacts repositories set-cleanup-policies images \
--location=europe-west1 \
--policy=cleanup-policy.json
// cleanup-policy.json
{
"name": "delete-old-images",
"action": {"type": "Delete"},
"condition": {
"tagState": "UNTAGGED",
"olderThan": "30d"
}
}
8.2 Politique de rétention par tags
{
"name": "keep-recent-versions",
"action": {"type": "Keep"},
"condition": {
"tagPrefixes": ["release-", "v"],
"newerThan": "90d"
},
"mostRecentVersions": {
"keepCount": 10
}
}
9 - Remote Repositories
Cache des registries externes.
# Créer un remote repo pour Docker Hub
gcloud artifacts repositories create docker-hub-cache \
--repository-format=docker \
--location=europe-west1 \
--mode=remote-repository \
--remote-repo-config-desc="Docker Hub cache" \
--remote-docker-repo=DOCKER-HUB
# Utiliser le cache
docker pull europe-west1-docker.pkg.dev/mon-projet/docker-hub-cache/nginx:latest
Résumé
Dans ce chapitre, nous avons appris :
- Les types de repositories
- La gestion des images Docker
- Les packages npm et Python
- Le Vulnerability Scanning
- Les Cleanup Policies
- Les Remote Repositories