๐๐ป ๋ค์ด๊ฐ๋ฉฐ
์ค๋๋ง์ ํฌ์คํ ํฉ๋๋ค. ํ๊ต + ํ์ฌ + ๋์๋ฆฌ๋ก ๋๋ฌด ๋ฐ์ ๋๋จธ์ง...
์ค๋์ AWS Codedeploy, Codepipeline ์ ํตํ node.js, ec2, git ์ ์ฐ๋ํด ๋ฐฐํฌ ์๋ํ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค.
์ฌ์ค CI/CD๋ ์ ๋ชจ๋ฅด๊ธฐ๋ ํ๊ณ , ํด๋ณธ ์ ๋ ์๋๋ฐ ๊ทธ๋ฅ ํ์ฌ์์ ์๋ฒ๋ฅผ ๋ง์ง๋ค ๋๋ฌด ๋นํจ์จ์ ์ธ ์์คํ ์ธ ๊ฒ ๊ฐ์ ๋ฐฐํฌ ์๋ํ๋ฅผ ์์ผ์ผ๊ฒ ๋ค๊ณ ๋ง์ ๋จน์์ต๋๋ค.
๋ง์นจ ์๋ฒ ์ปด ๋ฌธ์ ๋ก ์ธํด ๊ธฐ์กด ์๋ฒ๋ค์ ec2๋ก ์ฎ๊ฒจ์ผ ํด์ ์ฎ๊ธด ๊น์ codedeploy, codepipeline์ ์ ์ฉํด๋ดค์ต๋๋ค.
์ด๋ป๊ฒ ์ฉ๋ฆฌ๊ฐ ์ด๋ฐ๊ฑธ ๋ง๋๋ก ํ์ฌ ์๋ฒ์ ๋ค์๋๊ณ ์? ์๊ท๋ชจ ์คํํธ์ ์ด๋ผ ์๋ฒ ๊ฐ๋ฐ์๊ฐ ์ ๋ฐ์ ์๊ฑฐ๋ ์~
DevOps ์ฑ ์ ๋ฐ๊ฒ ๋์ด์ (ucpc ์ํ์ด์๋ .. ?) ๋ฐฉํ๋์ ์ด๊ฑธ ์ข ์ฝ์ด๋ณด๋ฉฐ CI/CD ๊ณต๋ถ๋ฅผ ์ข ํด์ผ๊ฒ ์ต๋๋ค.
๊ณผ์ ์ด ๊ฝค ๊ธธ๊ณ ์ด๋ ค์์ ์ด ํฌ์คํ ์ ํตํด ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
โ๏ธ CI, CD๋?
์์ง ์ ๋ ์๋ฒฝํ๋ ๋ชจ๋ฅด์ง๋ง redhat์ด ๊น๋ํ๊ฒ ์๋ ค์ฃผ๋๋ผ๊ณ ์.
CI/CD๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋จ๊ณ๋ฅผ ์๋ํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ค ์งง์ ์ฃผ๊ธฐ๋ก ๊ณ ๊ฐ์๊ฒ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. CI/CD์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ง์์ ์ธ ํตํฉ, ์ง์์ ์ธ ์๋น์ค ์ ๊ณต, ์ง์์ ์ธ ๋ฐฐํฌ์ ๋๋ค. CI/CD๋ ์๋ก์ด ์ฝ๋ ํตํฉ์ผ๋ก ์ธํด ๊ฐ๋ฐ ๋ฐ ์ด์ํ์ ๋ฐ์ํ๋ ๋ฌธ์ (์ผ๋ช "์ธํ ๊ทธ๋ ์ด์ ํฌ(integration hell)")์ ํด๊ฒฐํ๊ธฐ ์ํ ์๋ฃจ์ ์ ๋๋ค.
ํนํ, CI/CD๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉ ๋ฐ ํ ์คํธ ๋จ๊ณ์์๋ถํฐ ์ ๊ณต ๋ฐ ๋ฐฐํฌ์ ์ด๋ฅด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ผ์ดํ์ฌ์ดํด ์ ์ฒด์ ๊ฑธ์ณ ์ง์์ ์ธ ์๋ํ์ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์ถ ์ฌ๋ก๋ฅผ ์ผ๋ฐ์ ์ผ๋ก "CI/CD ํ์ดํ๋ผ์ธ"์ด๋ผ ๋ถ๋ฅด๋ฉฐ ๊ฐ๋ฐ ๋ฐ ์ด์ํ์ ์ ์์ผ ๋ฐฉ์ ํ๋ ฅ์ ํตํด ์ง์๋ฉ๋๋ค.
https://www.redhat.com/ko/topics/devops/what-is-ci-cd
redhat์์ ํ์ณ์์ต๋๋ค. ํ๋ฒ ์ฝ์ด๋ณด์๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
CI (Continuous Integration), CD (Continuous Delivery, Continuous Deployment)
์ง์์ ์ธ ์ ๊ณต์ด๋ ๊ฐ๋ฐ์๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฒ๊ทธ ํ ์คํธ๋ฅผ ๊ฑฐ์ณ ๋ฆฌํฌ์งํ ๋ฆฌ(์: GitHub ๋๋ ์ปจํ ์ด๋ ๋ ์ง์คํธ๋ฆฌ)์ ์๋์ผ๋ก ์ ๋ก๋๋๋ ๊ฒ์ ๋ปํ๋ฉฐ, ์ด์ํ์ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์๊ฐ ํ๋ก๋์ ํ๊ฒฝ์ผ๋ก ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐํ๊ณผ ๋น์ฆ๋์คํ ๊ฐ์ ๊ฐ์์ฑ๊ณผ ์ปค๋ฎค๋์ผ์ด์ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ค๋๋ค. ์ง์์ ์ธ ์ ๊ณต์ ์ต์ํ์ ๋ ธ๋ ฅ์ผ๋ก ์๋ก์ด ์ฝ๋๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
์ง์์ ์ธ ๋ฐฐํฌ(๋ ๋ค๋ฅธ ์๋ฏธ์ "CD": Continuous Deployment)๋ ๊ฐ๋ฐ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๊ณ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ก๋์ ํ๊ฒฝ๊น์ง ์๋์ผ๋ก ๋ฆด๋ฆฌ์คํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณต ์๋๋ฅผ ์ ํดํ๋ ์๋ ํ๋ก์ธ์ค๋ก ์ธํ ์ด์ํ์ ํ๋ก์ธ์ค ๊ณผ๋ถํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ง์์ ์ธ ๋ฐฐํฌ๋ ํ์ดํ๋ผ์ธ์ ๋ค์ ๋จ๊ณ๋ฅผ ์๋ํํจ์ผ๋ก์จ ์ง์์ ์ธ ์ ๊ณต์ด ๊ฐ์ง ์ฅ์ ์ ํ์ฉํฉ๋๋ค.
๐ ๊ธฐ์กด ๋ฐฉ์์ ๋ฌธ์ ์
๊ธฐ์กด node.js, ec2, github ์ ํตํด ์๋ฒ ๋ฐฐํฌ ์์ ์ ์งํํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
local ๊ฐ๋ฐ -> github push (PR, merge ๋ฑ์ ์์ ๊ฑฐ์ณ์) -> ec2 ์์ pull -> build or run -> deploy ์๋ฃ
๋งค๋ฒ ๊ฐ๋ฐ ํ ์ง์ ec2 ์ ์ํด์ pull ๋ฐ๊ณ build, run ํด์ฃผ๋ ๋นํจ์จ์ ์ค์ด๊ณ ์ ์ฐ๋ฆฌ๋ AWS์์ ์ ๊ณตํ๋CodeDeploy, CodePipeline ์ ํตํด github repository์์ ์์ ํ code๊ฐ ๋ฐ๋ก ec2์์ deploy ๋๋๋ก ๋ฐฐํฌ ์๋ํ๋ฅผ ์งํํ ๊ฒ๋๋ค.
์ฌ์ค์ codebuild ๊น์ง ์ฌ์ฉํด์ ๋น๋ ํ์ผ์ ๋ง๋๋ ์์ ๋ ํด์ผํ์ง๋ง ์ ์ฒ์์ด๋๊น ์ผ๋จ CodeDeploy์ CodePipeline ๋ง ์ ์ฉํ์ฌ ๋ฐฐํฌํด๋ณด๊ฒ ์ต๋๋ค.
๐ ์ฌ์ - ec2 ์ nvm, npm, yarn, git, node ์ค์น
์ฒ์ ec2 ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ ์ํ๋ฉด ๋น์ฐํ ๊นจ๋ํ ์ํ์ ๋๋ค. (์ ๋ ubuntu 18.04 LTS ๋ฅผ ์ฌ์ฉํฉ๋๋ค)
์ฌ๊ธฐ์ node js ์๋ฒ๋ฅผ ๋๋ฆด ์ ์๊ฒ ์์ ํด๋ด ์๋ค.
ssh ๋ก ubuntu ์ ์ ์ ํฉ๋๋ค.
$ sudo apt-get install curl
$ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ sudo apt-get install build-essential
curl ๋ช ๋ น์ด์์ setup_16.x -> node 16 ๋ฒ์ ์ ๋ฐ๊ณ ์ถ๋จ ๋ป์ ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ๋ฒ์ ์ํ์๋ฉด ์ซ์๋ฅผ ๋ฐ๊พธ์๋ฉด ๋ฉ๋๋ค.
nvm ๊ณผ yarn๋ ์ค์นํฉ์๋ค.
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
$ export NVM_DIR="$HOME/.nvm"
$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
$ [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
$ nvm install --lts
$ npm install -g yarn
git ์ค์นํฉ์๋ค.
$ sudo apt-get update
$ sudo apt-get install git
๐ EC2 IAM ์์ฑ
AWS IAM ์ ๋ค์ด๊ฐ ์ญํ ์ ๋๋ฅด๊ณ , ์ญํ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ธฐ๋ณธ AWS ์๋น์ค ์ ์ฌ์ฉ ์ฌ๋ก๋ก๋ EC2๋ฅผ ๋๋ฌ์ฃผ๊ณ ๋ค์์ ๋๋ฆ ๋๋ค.
์ ์ฑ ํํฐ ๊ฒ์์ฐฝ์์
- AWSCodeDeployFullAccess
- AWSCodeDeployRole
- CloudWatchLogsFullAccess
- AmazonS3FullAccess
๋ฅผ ๊ฒ์ํด ์ฒดํฌํด์ฃผ๊ณ ๋ค์์ผ๋ก ๋์ด๊ฐ๋๋ค.
ํ๊ทธ์ ์ญํ ์ด๋ฆ์ ์ถ๊ฐํด์ค๋๋ค.
์ญํ ์ด๋ฆ๊ณผ ์ค๋ช ์ ์ ์ด์ฃผ๊ณ ์ญํ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ec2 ๋์๋ณด๋๋ก ๋์ด์ ์ฌ์ฉํ ์ธ์คํด์ค์์ ์ค๋ฅธ์ชฝ ๋ฒํผ -> ๋ณด์ -> IAM ์ญํ ์์ ์ ๋๋ฌ์ค๋๋ค.
IAM ์ญํ ์์ ๋ฐฉ๊ธ ๋ง๋ IAM์ ์ ํํฉ๋๋ค.
๐ CodeDeploy IAM ์์ฑ
ec2์ ์ญํ ์ ์ ์ฉํ์ผ๋ CodeDeploy์๋ ์ญํ ์ ์ ์ฉํด์ผํฉ๋๋ค.
๋จผ์ AWS IAM -> ์ญํ ๋ก ๋ค์ ์ด๋ํด ์ญํ ๋ง๋ค๊ธฐ๋ฅผ ๋๋ฌ์ค๋๋ค.
์ด๋ฒ์๋ ์ผ๋ฐ ์ฌ์ฉ ์ฌ๋ก์์ CodeDeploy๋ฅผ ๋๋ฅด๊ณ ํ๋จ์ ๋จ๋ ์ฌ์ฉ ์ฌ๋ก ์ ํ์์ ๋๊ฐ์ด CodeDeploy๋ฅผ ๋๋ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
default๋ก ์ ์ฑ ์ด ๋น๋๋ค. ๊ทธ๋ฅ ๋์ด๊ฐ๋๋ค.
ํค-๊ฐ์ ์ ๋ ฅํด์ฃผ๊ณ ๋์ด๊ฐ๋๋ค.
์ญํ ์ด๋ฆ๊ณผ ์ค๋ช ์ ์ ์ด์ฃผ๊ณ ์ญํ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ์์ฑํฉ๋๋ค.
๐ CodeDeploy ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ
AWS ๋ฉ๋ด์์ CodeDeploy๋ฅผ ๊ฒ์ํด ๋ค์ด๊ฐ ํ ์ข ๋ฉ๋ด์ ์๋ ๋ฐฐํฌ -> ์์ํ๊ธฐ -> ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ์ ์์ฑํ๊ณ , ์ปดํจํ ํ๋ซํผ์ EC2/์จํ๋ ๋ฏธ์ค๋ก ์ ํํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์ ๋๋ฌ์ค๋๋ค.
๐ CodeDeploy ์ฌ์ฉ์ ์ถ๊ฐ
CodeDeploy ์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ EC2 ์ ์ฐ๋ํ๊ธฐ ์ํด CodeDeploy Agent๋ฅผ ์ค์นํด์ผํฉ๋๋ค. ๋ํ ํด๋น CodeDeploy ๋ฅผ ์ฌ์ฉํ group์ ๋ง๋ค์ด์ค์ผ ํฉ๋๋ค.
IAM ์์ ์ฌ์ฉ์ ์ถ๊ฐ๊ฐ ํ์ํ๋ IAM์ผ๋ก ์ด๋ํ์ฌ ์ก์ธ์ค ๊ด๋ฆฌ -> ๊ทธ๋ฃน์ผ๋ก ์ด๋ํฉ๋๋ค.
๊ทธ๋ฃน ์์ฑ์ ๋๋ฌ์ค๋๋ค.
๊ทธ๋ฃน ์ด๋ฆ๋ง ์ง์ ํ๊ณ ์์ฑํฉ๋๋ค. ์ ์ฑ ์ ์ธ๋ผ์ธ ์ ์ฑ ์ผ๋ก ์ถ๊ฐํด์ค๊ฒ๋๋ค.
์ดํ ์์ฑ๋ ๊ทธ๋ฃน์ผ๋ก ๋ค์ด๊ฐ ํ๋จ์ ๊ถํ -> ๊ถํ ์ถ๊ฐ -> ์ธ๋ผ์ธ ์ ์ฑ ์์ฑ์ ๋๋ฆ ๋๋ค.
json์ ๋๋ฅด๊ณ ๋ถ์ฌ๋ฃ๊ธฐ ํฉ๋๋ค.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:*",
"codedeploy:*",
"ec2:*",
"lambda:*",
"elasticloadbalancing:*",
"s3:*",
"cloudwatch:*",
"logs:*",
"sns:*"
],
"Resource": "*"
}
]
}
์ด๋ฆ์ ์ง์ ํ๊ณ ์ ์ฑ ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
๊ถํ ์ ์ฑ ์ด ๋ฐฉ๊ธ ์์ฑํ ๊ฒ์ผ๋ก ์ ๋๋ก ์ถ๊ฐ๋์์ผ๋ฉด ๋ฉ๋๋ค.
์ด์ ํด๋น ๊ทธ๋ฃน์ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํด์ผํฉ๋๋ค. ์ฌ์ฉ์๋ฅผ ๋จผ์ ๋ง๋ค์ด์ค์๋ค.
IAM ์ข์ธก ๋ฉ๋ด์์ ์ฌ์ฉ์ -> ์ฌ์ฉ์ ์ถ๊ฐ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ฌ์ฉ์ ์ด๋ฆ์ ์ง์ ํ๊ณ , ์ก์ธ์ค ์ ํ์์ ์ก์ธ์ค ํค - ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ก์ธ์ค ๋ฅผ ์ ํํฉ๋๋ค.
๋ค์์ผ๋ก ๋์ด๊ฐ๋ฉด ์ฌ์ฉ์ ์ถ๊ฐ๊ฐ ๋์ต๋๋ค. ๋ฐฉ๊ธ ๋ง๋ค์ด๋ ๊ทธ๋ฃน์ ์ ํํฉ๋๋ค.
ํ๊ทธ๋ฅผ ์ถ๊ฐํ๊ณ ๋์ด๊ฐ๋๋ค.
๊ฒํ ์๋ฃ ํ ์์ฑํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ก์ธ์ค ํค๊ฐ ๋์ต๋๋ค. csv๋ฅผ ๋ค์ด๋ฐ์์๋ค. ์ด ํ์ผ์ ์ฌ๊ธฐ๊ฐ ์๋๋ฉด ๋ ์ด์ ๋ณผ ์ ์์ผ๋ ๊ผญ ๋ค์ด ๋ฐ์์ค๋๋ค.
์ฌ๊ธฐ๊น์ง ์ค์๋ฉด CodeDeploy ์ฌ์ฉ์ ์์ฑ๊น์ง ์๋ฃํ ๊ฒ์ ๋๋ค.
๐ CodeDeploy Agent ์ค์น
๋จผ์ awscli ์ค์น๊ฐ ํ์ํฉ๋๋ค.
$ sudo apt install awscli
์๊น ๋ค์ด๋ฐ์ ์ฌ์ฉ์ csv ํ์ผ์์ ์ก์ธ์ค ํค ์์ด๋์ ์ํฌ๋ฆฟ ์ก์ธ์ค ํค๋ฅผ ๋ณด๊ณ aws configure๋ฅผ ์ค์ ํด์ค์ผ ํฉ๋๋ค.
$ sudo aws configure
AWS Access Key ID : ๋ค์ด ๋ฐ์ csv ํ์ผ ๋ด์ Access Key ID
AWS Secret Access KEy : ๋ค์ด ๋ฐ์ csv ํ์ผ ๋ด์ Secret Access Key
Default region name : ap-northeast-2
Default output format : json
agent ์ค์น ํ์ผ์ ๋ค์ด๋ก๋ ํ๊ณ install ํ์ผ์ ๊ถํ์ ์ถ๊ฐํฉ์๋ค.
$ wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
$ chmod +x ./install
ruby๋ฅผ ๋จผ์ ์ค์นํ๊ณ , agent๋ฅผ ์ค์นํฉ๋๋ค.
$ sudo apt-get install ruby
$ sudo ./install auto
$ sudo service codedeploy-agent status # ์ค์น ํ์ธ
๋ง์ง๋ง ๋ช ๋ น์ด๋ก status๋ฅผ ํ์ธํ๊ณ active๊ฐ ๋ฌ๋ค๋ฉด ์ฑ๊ณต์ ๋๋ค.
์ธ์คํด์ค ๋ถํ ์ codedeploy-agent๊ฐ ์๋ ์์ ๋๋๋ก shell script๋ฅผ ์์ฑํฉ์๋ค.
$ sudo vim /etc/init.d/codedeploy-startup.sh
i๋ก ํธ์ง๋ชจ๋ ์ง์
#!/bin
sudo service codedeploy-agent restart
esc -> :wq ์ ์ฅ ํ ๋๊ฐ๊ธฐ
์์ฑํ ์คํฌ๋ฆฝํธ ํ์ผ์ ์คํ ๊ถํ์ ์ถ๊ฐํฉ๋๋ค.
$ sudo chmod +x /etc/init.d/codedeploy-startup.sh
๐ ๋ฐฐํฌํ ์๋ฒ ์ค์
์ฐ๋ฆฌ๊ฐ ๋ฐฐํฌํ ์๋ฒ ๋ด์ (๋ฃจํธ๊ฒฝ๋ก) appspec.yml ํ์ผ์ ์๋ก ์ถ๊ฐํด์ผํฉ๋๋ค. appspec.yml ํ์ผ์ CodeDeploy๊ฐ ๋ฐฐํฌ๋ฅผ ๊ด๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ ํ์ผ์ด๋ผ๊ณ ํฉ๋๋ค.
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/build/
CodeDeploy๊ฐ ๋ฐฐํฌํ ์์น๊ฐ /home/ubuntu/build/ ๊ฒฝ๋ก๊ฐ ๋ฉ๋๋ค.
์ดํ๋ก ubuntu ๋ด๋ถ์ /home/ubuntu/build ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋ฉ๋๋ค.
$ mkdir /home/ubuntu/build
์ฐ๋ฆฌ๊ฐ ๋ฐฐํฌํ ํ๋ก์ ํธ๋ฅผ ์ฐ๋ถํฌ๋ก cloneํด ์ต์๋ค.
$ git clone https://github.com/githubid/repository-name
์ถ๊ฐ๋ก ๊นํ id, password (token)์ ๋งค๋ฒ ์น๊ธฐ ๊ท์ฐฎ์ผ๋๊น ๋์คํฌ์ ์ ์ฅํด๋๋ฉด ๋์ค์ pull ๋ฐ์ ๋ ๋ ์์ฑํ์ง ์์๋ ๋ฉ๋๋ค.
$ cd repository-name
$ git config --global credential.helper store
๋ณธ์ธ์ด ํด๋ก ๋ฐ์ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ ํ ์ ๋ช ๋ น์ด๋ฅผ ์น๊ณ ๋์ ํ๋ฒ ๋ pull ๋ฐ์ผ๋ฉด ๋ค์๋ถํฐ๋ ์ ์ฅ๋ ๊ธฐ๋ก์ผ๋ก ๋ฐ๋ก ๋๋ค๊ณ ํฉ๋๋ค.
๐ CodeDeploy ๋ฐฐํฌ ์์ฑ
์ ๋ง ๊ธธ๊ณ ์ด๋ ต์ฃ .. ์กฐ๊ธ๋ง ๋ํ๋ฉด ๋๋๋๊น ํ๋ด์ธ์. (To. ME..)
์ด์ EC2 ์ CodeDeploy๋ฅผ ์ฐ๊ฒฐํด์ค์๋ค.
AWS ์์ CodeDeploy ๋ก ์ด๋ํ ํ ์๊น ๋ง๋ค์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ฆญํฉ๋๋ค.
๋ฐฐํฌ ๊ทธ๋ฃน ์์ฑ์ ํด๋ฆญํฉ๋๋ค.
๋ฐฐํฌ ๊ทธ๋ฃน ์ด๋ฆ ์ ๋ ฅ ํ, ์๋น์ค ์ญํ ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ role ์ ์ ํํฉ๋๋ค.
ํ๊ฒฝ ๊ตฌ์ฑ์์ Amazon EC2 ์ธ์คํด์ค๋ฅผ ์ ํํ๊ณ ์ ์ฉํ ec2 ํ๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ค์ ์ค์ ๊น์ง ๋ง์น๊ณ ๋ฐฐํฌ ๊ทธ๋ฃน ์์ฑ์ ๋๋ฌ ์๋ฃํฉ์๋ค.
์ค๋ฅธ์ชฝ ์๋จ์ ์ฃผํฉ์ ๋ฐฐํฌ ์์ฑ์ ๋๋ฌ์ค์๋ค.
์ฐ๋ฆฌ๋ github์ ์ ์ฅํ ๊ฑฐ๋ ์ ํํด์ฃผ๊ณ , github token ์ด๋ฆ์ ์ ๋ ฅํด์ค ๋ค์ github์ ์ฐ๊ฒฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค.
repository์์ ๋ฐฐํฌํ commit์ ๋๋ฌ Id๋ฅผ ํ์ธํด์ฃผ๊ณ ๋ณต์ฌํฉ๋๋ค.
์ถ๊ฐ ๋ฐฐํฌ ๋์ ์ค์ ์์ ๋ฐฐํฌ ์คํจ๋ฅผ ๋๋ฌ์ค๋๋ค.
์๋ฃ ํ ๋ฐฐํฌ ๋ง๋ค๊ธฐ๋ฅผ ๋๋ฅด๋ฉด
์ฑ๊ณต์ด ๋จ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
ubuntu ํฐ๋ฏธ๋์์ build ๋๋ ํฐ๋ฆฌ๋ฅผ ํ์ธํด๋ณด์๋ฉด
์ ์์ ์ผ๋ก ํด๋น ์ปค๋ฐ ๋ด์ฉ์ด ๋ค์ด์ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๐ CodePipeline ์ ํตํ ๋ฐฐํฌ ์๋ํ
CodeDeploy๋ง ๊ฐ์ง๊ณ ๋ ์์ค ์ฝ๋ ์์ ์ฌํญ์ ๋ฐ๋ก ๋ฐฐํฌํด์ฃผ์ง ๋ชปํฉ๋๋ค. ๋ฐ๋ผ์ CodePipeline์ ํตํด ๋ฐฐํฌ ์๋ํ๋ฅผ ํด์ค์ผํฉ๋๋ค.
AWS CodePipeline ๋ฉ๋ด์ ๋ค์ด๊ฐ์ ํ์ดํ๋ผ์ธ ์์ฑ์ ๋๋ฌ์ค์๋ค.
pipeline ์ด๋ฆ์ ์ค์ ํด์ฃผ๊ณ ๋ค์์ ๋๋ฆ ๋๋ค.
์์ค ๊ณต๊ธ์๋ฅผ github(๋ฒ์ 2)๋ก ์ ํํ๊ณ Github์ ์ฐ๊ฒฐ์ ๋๋ฌ ๋์ github๊ณผ ์ฐ๊ฒฐํด์ค๋๋ค.
์ค๊ฐ์ ์ด๋ฐ ๋ถ๋ถ์ด ๋์จ๋ค๋ฉด ์ ์ฑ ์ค์น๋ฅผ ๋๋ฅด๊ณ ํด๋น ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ ํํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์ฐ๊ฒฐ์ ๋๋ฆ ๋๋ค.
๋น๋ ์คํ ์ด์ง๋ ๊ฑด๋๋ฐ๊ณ (์ ์ฉ๋ฆฌ๋ผ ์์ง CodeBuild๋ ์ฌ์ฉํ์ง ์์ต๋๋ค ๋์ค์ ์ถ๊ฐํด๋ณผ๊ฒ์)
๋ฐฐํฌ ์คํ ์ด์ง๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ฐฐํฌ ๊ณต๊ธ์๋ฅผ AWS CodeDeploy๋ก ์ ํํ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐฐํฌ ๊ทธ๋ฃน์ ์ ํํด์ค๋๋ค.
์ด๋ผ๋ผ ? ์คํจํ์ต๋๋ค. ๊ตฌ๊ธ๋ง์ ํด๋ณด๋ group-role ์ ์ฑ ์ codestar-connections: UseConnection ์ ์ถ๊ฐํด์ค์ผํ๋ต๋๋ค.
์๊น ๋ง๋ IAM -> ์ฌ์ฉ์ ๊ทธ๋ฃน -> name-deploy-pipe-group-role์ ๊ฐ์ ์ ์ธ๋ผ์ธ ์ ์ฑ ์ ํธ์งํด์ค๋๋ค.
์ฑ๊ณตํ์ต๋๋ค~!
๐ PM2
์ด์ CodeDeploy์ CodePipeline์ ํตํด ๋ ํฌ์งํ ๋ฆฌ ์ฝ๋ ์์ ์ ์๋์ผ๋ก ec2์ ๋ฐ์์ด ๋ฉ๋๋ค.
ํ์ง๋ง ์๋ฒ๋ ์ฝ๋๊ฐ ์์ ๋ ์ ์ฌ์์์ด ํ์ํ๋ฏ๋ก pm2๋ฅผ ์ค์นํ์ฌ ์ฝ๋ ์์ ์ด ์ผ์ด๋ ์ ์๋์ผ๋ก ์๋ฒ ์ฌ์์์ด ๋๋๋ก ํด์ผํฉ๋๋ค.
$ sudo npm install pm2 -g
๊ฐ๋จํ Pm2๋ฅผ ์ ์ญ์ผ๋ก ์ค์นํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์์ง CodeBuild๋ฅผ ํตํด build ํ์ผ์ ์์ฑํ๋๋ก ์ค์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ผ๋จ์ ecosystem.json file์ ๋ง๋ค์ด pm2๊ฐ ์๋ฒ๋ฅผ ์คํํ๋๋ก ํฉ๋๋ค.
ํ๋ก์ ํธ์ ๋ฃจํธ์ ecosystem.json ํ์ผ์ ๋ง๋ค์ด์ค๋๋ค.
(๋ก์ปฌ์์ ์์ ํ๊ณ repository์ ์ฌ๋ฆฌ์ธ์!)
{
"apps": [
{
"name": "project-name",
"script": "./node_modules/.bin/ts-node",
"args": "./src/index.ts",
"watch": true
}
]
}
pm2 ๊ฐ ์ด ํ์ผ์ ์คํ์ํฌ ๊ฒ๋๋ค.
pm2์ --watch ์ต์ ์ ์ฃผ๋ฉด ์ฝ๋๊ฐ ์์ ๋๋ฉด ์๋์ผ๋ก ์๋ฒ ์ฌ์์์ ํด์ค๋๋ค.
์ถ๊ฐ๋ก ecosystem.json ์ ์ฌ๋ฆฐ ์ปค๋ฐ์ main์ merge ํ์ ์๋์ผ๋ก ์ฝ๋๊ฐ ์์ ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค!
build ๋๋ ํฐ๋ฆฌ๋ฅผ ํ์ธํด๋ณด์๋ฉด ecosystem์ด ์๋์ผ๋ก ๋ค์ด์ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ด์ build ๋๋ ํฐ๋ฆฌ ๋ด์์ Pm2 ๋ก ecosystem.json์ ์คํ์์ผ ์ฃผ์๋ฉด ๋ฉ๋๋ค.
$ pm2 start ecosystem.json
์๋ฐ ์๋ฌ๋ฅผ ๋ง๋์ ๋ค๋ฉด
์์ฐจ์ฐป yarn์ ํ๋ฒ ์คํํด์ ํจํค์ง๋ฅผ ๋ค์ด๋ฐ์ node_modules ๋ฅผ ๋ง๋ค์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์ด๋ ๊ฒ online ์ํ๊ฐ ๋์๋ค๋ฉด ์ฑ๊ณต์ ๋๋ค.
์ด์ repository์ ์ฝ๋๊ฐ ์์ ๋๋ฉด ์๋์ผ๋ก ec2์ ๋ฐ์๋๊ณ , pm2๊ฐ ์๋ฒ๋ฅผ ์ฌ์์ํด์ค๋๋ค.
โค๏ธ๐ฅ ์ฐธ๊ณ ๋ธ๋ก๊ทธ
https://ookm1020.tistory.com/5?category=858485
์ ๋ธ๋ก๊ทธ ์ ๋ง ๋ง์ด ์ฐธ๊ณ ํ์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค ๐๐ป
๐๐ป ๋ง์น๋ฉฐ
์์ฒญ ๊ธด ํฌ์คํ ์ด๋ผ ํ๋๋ค์.
์ฌ๊ธฐ๊น์ง ํ์๋๋ผ ๊ณ ์ ๋ง์์ต๋๋ค.
aws์ ๊ฐ๋ฐ์ ์ธ๊ณ๋ ๋ฉ๊ณ ๋ ํํ๋ค์ ๐