목표
1. Terraform을 Jenkins Pipeline을 통해 실행한다.
2. 여러 Account의 AWS 인증정보를 Vault를 통해 안전하게 관리한다.
3. 구축한 환경의 재현이 간단해야 한다. (Docker)
4. 추후 확장이 용이해야 한다.
구성요소
1. Docker
- Vault, Consul, Jenkins를 기동시키는 역할
- Docker Compose를 통해 구성
2. Hashicorp Vault & safe
- Safe를 통해 좀 더 쉽게 사용할 수 있다.
- Vault KV를 통해 Credential 정보를 저장해두고, safe를 통해 Pipeline 중간에 get 해오는 방식으로 활용
- Storage Backend : Consul
- Secret Backend : AWS
3. Hashicorp Consul
- Vault를 위한 Storage Backend, 그냥 File Backend를 쓸까 고민했는데, 추후 확장성을 고려하여 Consul을 구성하였다.
4. Jenkins (Blue Ocean)
- Dockerhub에 있는 Jenkins (또는 Jenkins Blue Ocean) Image를 사용하려고 하였으나, Ubuntu가 없고 Debian 또는
Centos 계열의 OS만 지원하는 것으로 보여 Ubuntu 18.04 를 Base로 하여 이미지를 자체 빌드하였다.
Jenkins Version도 공식 Image보다 높은 LTS 버전으로 배포하였다.
- Concourse와 고민하였으나, Jenkins가 자료가 많아서 배우기 쉽기때문에 Jenkins를 선택.
특히, Blue Ocean이라는 Plugin이 Continuous delivery pipelines을 잘 지원해주는 것으로 보여
Blue Ocean을 적극 이용하기로 하였다.
(Jenkinsfile을 GUI에서 작성하도록 지원해주는 Plugin으로 보이는데, 그냥 Jenkins를 쓰는 것보다 UI가 미려하다.)
5. Terraform
- git(AWS CodeCommit)을 통해 형상관리
- s3를 backend로 사용하여 state를 보관
구축방법
다음 글에서 작성..
참조
https://blog.2dal.com/2017/10/28/aws-vpc-with-terraform-modules/
http://egloos.zum.com/mcchae/v/11318672
https://github.com/segmentio/terraform-docs
https://github.com/mcchae/docker_consul_vault
https://www.vaultproject.io/docs/commands/kv/put
https://www.vaultproject.io/docs/commands/secrets/enable
https://www.vaultproject.io/docs/secrets/kv/kv-v2
https://github.com/starkandwayne/safe
https://askubuntu.com/questions/98782/how-to-run-an-alias-in-a-shell-script
https://blog.outsider.ne.kr/1266
https://blog.outsider.ne.kr/1267
https://www.vaultproject.io/docs/concepts/auth
https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line
https://bluese05.tistory.com/77
https://github.com/marco-lancini/docker_vault
https://www.marcolancini.it/2017/blog-vault/
https://blog.outsider.ne.kr/1342
https://brunch.co.kr/@alden/51
'Devops > CI, CD' 카테고리의 다른 글
AWS Service를 활용한 AMI CI/CD 환경 구성 (Packer) (0) | 2021.06.30 |
---|---|
[용어정리] CI/CD, BDD (0) | 2020.04.28 |