Рубрики
Uncategorized

Строить с Трэвисом с помощью Docker

Как установить рельсы с Travis CI. Tagged с Docker, DevOps, Travisci, Deploy.

Использование 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»