Circle CI 통합구축
Devops

Circle CI 통합구축

뉴비뉴 2019. 12. 2.

지속적인 통합이란?

간단하게 말하면 배포할 때 번거롭게 타이핑하는 명령어들을 한번에 관리할 수 있고,

그 작업을 git master 의 push 가 이루어지면 자동으로 해준다는 것이다.

성공과 실패여부를 slack 으로 notification을 발생시킬 수도 있다.

 

구성안
- Code Repository : Github

- CI : CircleCI

- Registry : AWS ECR

- CD : CircleCI

- Target : AWS Batch(ECS)

- Notification : Slack

 

위 처럼 구성을 해보도록 하겠습니다.

 

Circle CI(config.yml)의 Orbs, Jobs, Steps, Workflows에 대해 알아보도록 하겠습니다.

https://circleci.com/docs/2.0/jobs-steps/#jobs-overview

 

Orbs, Jobs, Steps, and Workflows - CircleCI

Orbs, Jobs, Steps, and Workflows The document provides an overview of Jobs, Steps, Workflows and new .circleci/config.yml keys for Orbs. Orbs Overview Orbs are packages of config that you either import by name or configure inline to simplify your config, s

circleci.com

orbs

orbs는 이름으로 가져오거나 인라인으로 구성하여 프로젝트 내에서 또는 프로젝트 간에 구성을 단순화하고 공유하고 재사용 할 수 있는 구성 패키지 입니다.

orbs는 CircleCI 플랫폼을 빠르게 사용할 수 있도록 도와주는 패키지입니다.

 

jobs

단계 모음이다. 작업의 모든 단계는 단일 장치에서 실행되며 실행중인 계획에서 CircleCI 컨테이너를 사용합니다.

작업 및 단계를 통해 제어를 강화하고 실행의 각 단계에서 워크 플로우 및 상태에 대한 프레임 워크를 제공하여 더 자주 피드백을보고합니다. 다음 다이어그램은 작업 간 데이터 흐름을 보여줍니다. 작업 영역은 단일 워크 플로에서 작업간에 데이터를 유지합니다. 캐싱은 다른 워크 플로 빌드에서 동일한 작업간에 데이터를 유지합니다. 아티팩트는 워크 플로가 완료된 후 데이터를 유지합니다.

 

steps

steps은 작업 중에 실행되는 실행 가능한 명령 모음으로,

checkout: 코드를 체크 아웃하는 데 필요한 키와

run: 임의의 여러 줄 셸 명령 스크립팅을 추가할 수 있습니다.

- save_cache:,

- restore_cache:,

- deploy:, store_artifacts:,

- store_test_results:

- add_ssh_keys 단계 아래에 중첩된다.

 

# Sample Configuration with Imported Orb


version: 2.1

orbs:
  aws-s3: circleci/aws-s3@1.0.0 #imports the s3 orb in the circleci namespace

workflows:
  build-test-deploy:
    jobs:
      - deploy2s3: # a sample job that would be defined above.
          steps:
            - aws-s3/sync: #invokes the sync command declared in the s3 orb
                from: .
                to: "s3://mybucket_uri"
                overwrite: true


# Sample Configuration with Parallel Jobs


version: 2
jobs:
  build:
    docker:
      - image: circleci/<language>:<version TAG>
    steps:
      - checkout
      - run: <command>
  test:
    docker:
      - image: circleci/<language>:<version TAG>
    steps:
      - checkout
      - run: <command>
workflows:
  version: 2
  build_and_test:
    jobs:
      - build
      - test

workflows

위의 예시를 보면 build, test 2개의 작업을 따로 진행한다고 생각하면 된다.

git에서 push 가 이루어지면 build 와 test는 서로 따로 작동하게 된다.

 

commit message "mail guide"로 2개의 작업이 실행 된 모습

 

https://circleci.com/blog/continuous-integration-for-django-projects/

 

삽질기록

1. - setup_remote_docker version: docker_layer_caching: true

docker_layer_caching:true 는 유료(Custom) 등급의 이용자만 가능하다.

 

2. docker command not found

docker 명령어 타이핑 시 위와 같은 오류가 발생하였고, 확인해보니 공식적으로 제공하는 image를 사용해야했고,

setup_remote_docker의 버전을 지정해줘야 했다(?) 이 부분은 확실하지 않지만 아래와 같이 설정해줬더니 해결되었다.

- image: circleci/python:3.6.1

- setup_remote_docker:
version: 18.06.0-ce

 

3. yml 줄바꿈

처음에는 git commit과 push 타이핑하는 시간이 아까워서 git 리포지토리에서 했더니 줄바꿈으로 문제가 많이 발생했다.

에디터를 사용하니 yml 문법을 지원해서 쉽게 해결하였다.

 

4. aws no basic auth credentials (ing..)

aws ecr get-login —no-include-email —region ap-northeast-2 타이핑 시 나오는 문자열을 복사 붙여넣기하면 로그인이 된다.

나는 타이핑 시 나오는 문자열을 어떻게 복사 붙여넣기를 자동화할까 생각하다가 우선 타이핑 시 나오는 문자열을 입력해두고

해결하였다. 추후에 분명 인증오류가 발생할텐데 지켜야봐야겠다.

 

 

댓글

💲 추천 글