이건 AWS의 GitHub이다. 코드가 중앙 레파지토리에 동기화되고, 백업,롤백 다 된다.
AWS CodeCommit 은 AWS의 개인 레파지토리가 생긴다. 레파지토리 크기도 제한없고, 제한에 걸리면 AWS에 문의하면 된다. 완전 관리형에 가용성, 보안성이 높고 형식도 일관되게 가져간다. AWS Cloud Acount내에서 코드가 관리(즉, IAM 유저를 잘 사용하라는 말)된다.
깃 커멘드라인을 사용할 수 있는데, ECR과 마찬가지로 계정 확인이 필요하다. 인증은 IAM 폴리시를 통해서 관리한다. AWS KMS를 통해서 암호화 전송을 지원한다. IAM를 통해서 자격을 나누면 된다.
기본 언어나 docker가 지원된다. 코드빌드 컨테이너가 buildspec.yml를 불러와서 안의 명령을 실행한다. buildspec.yml 파일은 코드의 루트에 있어야한다. S3 캐싱하는 옵션이 있다. 빌드를 다하면 S3에 아티팩트를 전달하고, 로그는 Cloud Watch Logs나 S3에 남긴다.
원래는 VPC 밖에서 빌드하지만 VPC가 필요한 여러 서비스들이랑 연결해서 빌드해야하는 경우, VPC 안에서도 빌드하기도 한다. 딥한 트러블 슈팅을 위해 로컬에서도 빌드하기도 한다.
version: 0.2
run-as: Linux-user-name
env:
shell: shell-tag
variables:
key: "value"
key: "value"
parameter-store:
key: "value"
key: "value"
exported-variables:
- variable
- variable
secrets-manager:
key: secret-id:json-key:version-stage:version-id
git-credential-helper: no | yes
proxy:
upload-artifacts: no | yes
logs: no | yes
batch:
fast-fail: false | true
# build-list:
# build-matrix:
# build-graph:
phases:
install:
run-as: Linux-user-name
on-failure: ABORT | CONTINUE
runtime-versions:
runtime: version
runtime: version
commands:
- command
- command
finally:
- command
- command
pre_build:
run-as: Linux-user-name
on-failure: ABORT | CONTINUE
commands:
- command
- command
finally:
- command
- command
build:
run-as: Linux-user-name
on-failure: ABORT | CONTINUE
commands:
- command
- command
finally:
- command
- command
post_build:
run-as: Linux-user-name
on-failure: ABORT | CONTINUE
commands:
- command
- command
finally:
- command
- command
reports:
report-group-name-or-arn:
files:
- location
- location
base-directory: location
discard-paths: no | yes
file-format: report-format
artifacts:
files:
- location
- location
name: artifact-name
discard-paths: no | yes
base-directory: location
exclude-paths: excluded paths
enable-symlinks: no | yes
s3-prefix: prefix
secondary-artifacts:
artifactIdentifier:
files:
- location
- location
name: secondary-artifact-name
discard-paths: no | yes
base-directory: location
artifactIdentifier:
files:
- location
- location
discard-paths: no | yes
base-directory: location
cache:
paths:
- path
- path
위의 모든 것을 사용하진 않고, 자주 사용하는 것들에 대한 설명은 밑에 있다.
https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/build-spec-ref.html
CodeBuild와 마찬가지로 CodeDeploy가 어떻게 배포할 지 정해놓는 appspec.yml 파일이 있다.
CodeDeploy를 사용하기 위해서는 밑과 같은 것들이 필요하다.
json으로도 작성할 수 있지만, yml이 더 편한 것 같다. 밑의 코드는 EC2/온프레미스 예시이다.
version: 0.0
os: linux
# S3/github에서 파일 복사
files:
- source: Config/config.txt
destination: /webapps/Config
- source: source
destination: /webapps/myApp
# 순서에 따른 디플로이
hooks:
ApplicationStop:
DownloadBundle:
BeforeInstall:
Install:
AfterInstall:
ApplicationStart:
ValidateService: // 해당 배포가 잘 동작하는지 확인
- timeout: 3600
- location: Scripts/MonitoerService.sh
- runas: codedeployuser
BeforeAllowTraffic:
AllowTraffic:
AfterAllowTraffic:
위의 자주 사용하는 것들은 거의 이름에서 유추 가능해서 설명을 생략한다.
ECS appspec.yml의 예시는 밑의 사이트를 참고하기 바란다.
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/reference-appspec-file-example.html
실패하면 자동적 롤백하도록 설정가능하다. 롤백은 최근에 배포에 성공한 리비전을 다시 새로 배포하는 것이다. 이전 버전이 원래부터 살아있는게 아니니 주의하자.
배포 그룹은 EC2들이나 ASG / 태그랑 ASG를 섞은 것도 가능하고, 스크립트를 통해 환경변수로 설정도 가능하다.
AWS의 젠킨스이다. 소스를 가져와서 빌드하고 테스트 하고 배포한다. 아티팩트를 만들어서 S3 버킷에 저장하고 해당 아티팩트가 CodeBuild에서 빌드되어 만들어진 아티팩트를 S3에 저장 및 CodeDeploy로 전달하여 배포한다.
즉, 파이프라인 안에는 CodeCommit, CodeBuild, CodeDeploy, S3가 서로 상호작용한다.
CI/CD에 관련된 모든 서비스를 합친 것이다. JIRA랑 Git Issue를 연결해서 이슈트래킹이 가능하다.
넥서스 같은 것이라 보면 된다. 소프트웨어의 라이브러리 간의 종속성을 관리하는게 코드 아티팩트이다. Maven, Gradle, npm, pip 등 이런 것들의 종속성을 관리해 준다는 말이다.
퍼블릭 레파지토리를 프록시해서 VPC 안의 프라이빗 레파지토리를 만들어주고 그 레파지토리에서 AWS 사용자가 아티팩트를 가져가게 한다.
머신러닝을 통해 자동화 코드 리뷰 및 성능 리뷰를 해준다.
CodeGuru Reviewer : 정적분석 툴이다. 보안 취약점, 버그확인, 리소스 누수 찾기, 입력값 검증 등을 통해 자동화된 추론을 해준다. 그리고 머신러닝을 통해 계속 학습한다.
CodeGuru Profiler - 비용 및 성능을 분석해서 분석 내용과 최적화할 수 있는 개선사항을 제공한다. 런타임에 확인할 수 있어, 동적이라고도 볼 수 있다. 이 서비스를 사용해서 코드 비효율성을 확인하고, 컴퓨팅 비용 낮추고, 어떤 오브젝트가 메모리 잘 차지하는지 확인할 수 있다.