Aller au contenu principal

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

TypeFormatUsage
DockerContainer imagesContainers
npmJavaScript packagesNode.js
MavenJava artifactsJava/Kotlin
PythonPip packagesPython
AptDebian packagesLinux
YumRPM packagesLinux
GoGo modulesGo

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

Prochaine étape

Dans le prochain chapitre, nous verrons Cloud Deploy.

→ Chapitre suivant : Cloud Deploy


← Retour à la table des matières