Использование Docker с Travis CI от Montana Mendy
Хорошо, давайте сделаем это! Откройте свой любимый текстовый редактор или IDE. Классический .travis.yml
Файл для Python будет выглядеть так:
Для этого примера мы предположим, что вы используете Python3
а ниже находится ваш Dockerfile:
from python:3.6 CMD ["python", "-c", "print(12345)"]
Затем давайте создадим изображение и запустим его!
docker build -t foobar . Sending build context to Docker daemon 2.048kB Step 1/2 : from python:3.6 ---> 3e4c2972dc8d Step 2/2 : CMD ["python", "-c", "print(12345)"] ---> Running in 5e3273c46264 Removing intermediate container 5e3273c46264 ---> c1d000f3a768 Successfully built c1d000f3a768 Successfully tagged foobar:latest
Изображение построено с использованием FOOBAR
Как тег, в котором я сам буду использовать при запуске:
docker run --rm -ti foobar 12345
Некоторые объяснения аргументов ниже:
--rm
— автоматически удаляет контейнер, когда он выходит-tty
-t -распределить псевдо -тти, также известный какпта
- -Интерактивность, -i
— сохраняетStdin
Открыть, даже если не прикреплено к контейнеру
Теперь давайте настроем Трэвис .yml
файл! Как вы заметите, мы будем использовать Услуги
(как Docker является нашим сервисом в этом методе). Этот файл, как обычно, должен быть указан как .travis.yml
.
sudo: required language: python services: - docker script: - docker build -t foobar .
Теперь допустим, этот файл Travis хочет перейти к Amazon ECR. Имейте в виду, что ECR имеет некоторые ограничения на максимальное количество тегов и изображений.
Как вы видите, это также ожидает некоторых переменных окружающей среды, которые я предоставлю в .travis.yml.
Ниже приведен обновленный скрипт:
#!/bin/bash -e # the registry should have been created already # example my username would be: montanamendy # you could just paste a given url from AWS but I'm # parameterising it to make it more obvious how its constructed REGISTRY_URL=${AWS_ACCOUNT_ID}.dkr.ecr.${EB_REGION}.amazonaws.com # this is most likely namespaced repo name like myorg/veryimportantimage SOURCE_IMAGE="${DOCKER_REPO}" # using it as there will be 2 versions published TARGET_IMAGE="${REGISTRY_URL}/${DOCKER_REPO}" # lets make sure we always have access to latest image TARGET_IMAGE_LATEST="${TARGET_IMAGE}:latest" TIMESTAMP=$(date '+%Y%m%d%H%M%S') # using datetime as part of a version for versioned image VERSION="${TIMESTAMP}-${TRAVIS_COMMIT}" # using specific version as well # it is useful if you want to reference this particular version # in additional commands like deployment of new Elasticbeanstalk version TARGET_IMAGE_VERSIONED="${TARGET_IMAGE}:${VERSION}" # making sure correct region is set aws configure set default.region ${EB_REGION} # Push image to ECR ################### # I'm speculating it obtains temporary access token # it expects aws access key and secret set # in environmental vars $(aws ecr get-login --no-include-email) # update latest version docker tag ${SOURCE_IMAGE} ${TARGET_IMAGE_LATEST} docker push ${TARGET_IMAGE_LATEST} # push new version docker tag ${SOURCE_IMAGE} ${TARGET_IMAGE_VERSIONED} docker push ${TARGET_IMAGE_VERSIONED}
В этом сценарии я толкнул 2 тега, Последний
и Версия
Анкет AWS также имеет ограничения на это Анкет
Как вы видите, это также ожидает некоторых переменных окружающей среды, которые я предоставлю в .travis.yml.
Вы увидите обновленный сценарий, предполагающий, что выше один был назван docker_push.sh
:
sudo: required language: python services: - docker env: global: - DOCKER_REPO=myorg/veryimportantimage - - secure: travisEncryptedAWS_ACCOUNT_ID - secure: travisEncryptedAWS_ACCESS_KEY_ID - secure: travisEncryptedAWS_SECRET_ACCESS_KEY before_install: - pip install awscli - export PATH=$PATH:$HOME/.local/bin script: - docker build -t $DOCKER_REPO . deploy: provider: script script: bash docker_push.sh on: branch: master
Теперь не забудьте зашифровать свой env vars
Для наших ключей AWS их было три:
- Aws_account_id
- Aws_access_key_id
- AWS_SECRET_ACCESS_KEY
Как только вы убедитесь, что все env vars
Откройте свой IDE или текстовый редактор (в моем случае это VIM) и перечитывайте через скрипт Docker Bash, который я предоставил ранее, и убедитесь, что он правильно (также может приобрести помощь). Вот экранная крышка моей среды VIM для примера:
С тех пор, как вы установили Трэвис, прочитайте этот фрагмент Информация . Итак, мы можем бежать:
travis encrypt AWS_ACCOUNT_ID=super_secret --add
Вот и все, теперь вы в мире контейнеров Docker с Трэвисом!
Оригинал: «https://dev.to/travisci/build-with-docker-using-travis-ci-3oeb»