GitLab Container Registry et packages 20 min de lecture

Container Registry et Package Registry

GitLab Container Registry

Chaque projet GitLab dispose d'un registre Docker integre pour stocker vos images.

Construire et pousser une image

# Se connecter au registre
docker login registry.gitlab.com

# Construire l'image
docker build -t registry.gitlab.com/username/mon-projet:latest .

# Pousser l'image
docker push registry.gitlab.com/username/mon-projet:latest

# Tirer l'image
docker pull registry.gitlab.com/username/mon-projet:latest

Dans le pipeline CI/CD

build-image:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_TLS_CERTDIR: "/certs"
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker build -t $CI_REGISTRY_IMAGE:latest .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest

GitLab Package Registry

GitLab supporte plusieurs types de packages : npm, pip, Maven, NuGet, etc.

Publier un package npm

# .npmrc
@scope:registry=https://gitlab.com/api/v4/projects/PROJECT_ID/packages/npm/
//gitlab.com/api/v4/projects/PROJECT_ID/packages/npm/:_authToken=${CI_JOB_TOKEN}
publish-npm:
  stage: deploy
  script:
    - echo "@scope:registry=https://${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/" > .npmrc
    - npm publish

Publier un package Python (pip)

publish-pip:
  stage: deploy
  image: python:3.11
  script:
    - pip install twine
    - python setup.py sdist bdist_wheel
    - TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token
      twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*
Avantage : Le Container Registry et le Package Registry sont gratuits et integres a chaque projet GitLab.