Docker의 도움으로 Travis로 구축
Travis CI 빌드에 Docker 사용
좋아, 해보자! 즐겨 사용하는 텍스트 편집기 또는 IDE를 엽니다. Python용 클래식.travis.yml
파일은 다음과 같습니다.
이 예에서는 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
아래 인수에 대한 몇 가지 설명:
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
docker run --rm -ti foobar
12345
--rm
- 컨테이너가 종료될 때 컨테이너를 자동으로 제거합니다--tty
-t - a라고도 하는 pseudo-TTY를 할당합니다.pts
--interactive , -i
- 유지STDIN
용기에 부착하지 않아도 개봉
이제 Travis
.yml
파일을 설정하겠습니다! 알다시피 우리는 services
를 사용할 것입니다(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}
이 시나리오에서는
latest
및 versioned
2개의 태그를 푸시했습니다. AWS도 this에 대한 제한이 있습니다.보시다시피
.travis.yml.
에서 제공할 몇 가지 환경 변수도 예상합니다. 위 스크립트의 이름이 docker_push.sh
라고 가정하면 업데이트된 스크립트가 표시됩니다.sudo: required
language: python
services:
- docker
env:
global:
- DOCKER_REPO=myorg/veryimportantimage
- EB_REGION="eu-west-1"
- 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
이제 AWS 키에 대해
env vars
를 암호화해야 합니다. 그 중 세 개가 있습니다.일단 모든
env vars
IDE 또는 텍스트 편집기(제 경우에는 vim)를 열고 이전에 제공한 Docker bash 스크립트를 다시 읽고 올바른지 확인합니다(린트를 통해 도움을 받을 수도 있음). 예를 들어 내 vim 환경의 스크린 캡은 다음과 같습니다.Travis가 설치되어 있으므로 information 의 스니펫을 읽어보세요. 따라서 다음을 실행할 수 있습니다.
travis encrypt AWS_ACCOUNT_ID=super_secret --add
이제 Travis와 함께 Docker 컨테이너 세계에 들어왔습니다!
Reference
이 문제에 관하여(Docker의 도움으로 Travis로 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/travisci/build-with-docker-using-travis-ci-3oeb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)