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.
À 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.
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.
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