web-dev-qa-db-fra.com

Comment définir docker-credential-ecr-login dans mon PATH avant toute autre chose dans GitLab CI

J'utilise AWS ECR pour héberger une image Dockerfile privée, et je voudrais l'utiliser dans GitLab CI.

Conformément à la documentation, je dois définir docker-credential-ecr-login pour récupérer l'image privée, mais je ne sais pas comment le faire avant toute autre chose. C'est mon fichier .gitlab-ci:

image: 0222822883.dkr.ecr.us-east-1.amazonaws.com/api-build:latest

tests:
  stage: test
  before_script:
    - echo "before_script"
    - apt install Amazon-ecr-credential-helper
    - apk add --no-cache curl jq python py-pip
    - pip install awscli
  script:
    - echo "script"
    - bundle install
    - bundle exec rspec
  allow_failure: true # for now as we do not have tests

Je vous remercie.

5
Amanda Ferrari

À partir de la documentation GitLab. Pour interagir avec votre compte AWS, les pipelines CI/CD GitLab nécessitent que AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY soient définis dans vos paramètres GitLab sous Paramètres> CI/CD> Variables. Ajoutez ensuite à votre script avant:

image: 0222822883.dkr.ecr.us-east-1.amazonaws.com/api-build:latest

tests:
  stage: test
  before_script:
    - echo "before_script"
    - apt install Amazon-ecr-credential-helper
    - apk add --no-cache curl jq python py-pip
    - pip install awscli
    - $( aws ecr get-login --no-include-email )
  script:
    - echo "script"
    - bundle install
    - bundle exec rspec
  allow_failure: true # for now as we do not have tests

De plus, vous aviez une faute de frappe est awscli, pas awsclir. Ensuite, ajoutez les builds, les tests et Push en conséquence.

0
paltaa

Je pense que vous avez une sorte d'erreur de logique dans l'affaire. image dans la configuration de construction est une image d'exécution de scripts CI, et non une image que vous créez et déployez.

Je pense que vous n'avez en aucun cas à l'utiliser car c'est juste une image qui a des utilitaires et des connexions au GitLab CI, etc. L'image ne devrait normalement pas avoir de dépendances de votre projet.

Veuillez vérifier des exemples comme celui-ci https://Gist.github.com/jlis/4bc528041b9661ae6594c63cd2ef673c pour obtenir plus de clarté sur la manière de procéder correctement.

0
Alexandr Shurigin

J'ai rencontré le même problème en utilisant le mode exécuteur docker de gitlab runner.

SSH dans l'instance EC2 a montré que docker-credential-ecr-login était présent dans /usr/bin/. Pour le transmettre au conteneur, j'ai dû monter ce package sur le conteneur gitlab runner.

gitlab-runner register -n \
--url '${gitlab_url}' \
--registration-token '${registration_token}' \
--template-config /tmp/gitlab_runner.template.toml \
--executor docker \
--tag-list '${runner_name}' \
--description 'gitlab runner for ${runner_name}' \
--docker-privileged \
--docker-image "Alpine" \
--docker-disable-cache=true \
--docker-volumes "/var/run/docker.sock:/var/run/docker.sock" \
--docker-volumes "/cache" \
--docker-volumes "/usr/bin/docker-credential-ecr-login:/usr/bin/docker-credential-ecr-login" \
--docker-volumes "/home/gitlab-runner/.docker:/root/.docker"

Plus d'informations sur ce fil: https://gitlab.com/gitlab-org/gitlab-runner/-/issues/1583#note_375018948

0
rahuljain1311