CircleCI๋ก SpringBoot+Postgresql ํ๋ก์ ํธ ๋น๋ ๋ฐฐํฌํ๊ธฐ(1)
๋น๋ ๋ฐฐํฌ ํ๋ฆ
์ฌ์ ์ค๋น
AWS IAM ์ญํ (Role) ์ค์
EC2CodeDeployRole ์์ฑ
CodeDeployRole ์์ฑ
AWS EC2 IAM ์ญํ ์์
AWS IAM ์ฌ์ฉ์ ์ถ๊ฐ
CircleCI๋ก SpringBoot+Postgresql ํ๋ก์ ํธ ๋น๋ ๋ฐฐํฌํ๊ธฐ(2)
AWS S3 ๋ฒํท ์์ฑ
AWS CodeDeploy ์์ฑ
AWS EC2 ์ ์ํ์ฌ CodeDeploy Agent ์ค์น
AWS EC2 Postgresql ์ค์น
CircleCI๋ก SpringBoot+Postgresql ํ๋ก์ ํธ ๋น๋ ๋ฐฐํฌํ๊ธฐ(3)
์์ค์ฝ๋ ์์
.circleci > config.ymlํ์ผ
ํ๋ก์ ํธํด๋ > appspec.yml
ํ๋ก์ ํธํด๋ > scripts > deploy.sh
ํ๋ก์ ํธํด๋ > src > main > resources > application.yml
CircleCI Context์ค์
AWS ํ๊ฒฝ๋ณ์ ์ ์ฅ
ํ๋ก์ ํธ ํ๊ฒฝ๋ณ์ ์ ์ฅ
๊นํ๋ธ ์์ค์ฝ๋ pushํ์ฌ ๋น๋ ๋ฐฐํฌ ํ์ธ
ํํํ๋ฉด์ ๊ณต๋ถํ ๋ด์ฉ์ด๋ค (์ฌ์ค ๊ณต๋ถ๋ ์๋๊ณ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ง ์ฐ์ด๋จน์ด๋ณธ ์ ๋..)
์ ์ดํดํ์ง ๋ชปํ ๋ถ๋ถ๋ ๋ง๊ณ ์์ฒญ ํค๋งค์๋ค. ์ผ๋จ ์ด๋ป๊ฒ ๋์๋์๋์ง ๋จ๊ฒจ๋๋ ์ฉ๋๋ก ์์ฑํ๋ ๊ธ์ด๋ค
์์ค์ฝ๋ ์์
.circleci > config.ymlํ์ผ
version: 2.1
orbs:
aws-s3: circleci/aws-s3@1.0.13
aws-code-deploy: circleci/aws-code-deploy@0.0.12
jobs:
build:
docker:
- image: circleci/openjdk:11-jdk
environment:
DATABASE_URL: ${MY_POSTGRES_URL} #CircleCI Project Settings > Environment์ ๋ด์ฉ
steps:
- checkout
- run:
name: gradlew ๊ถํ ๋ถ์ฌ
command: chmod +x ./gradlew
- run:
name: gradle ๋น๋
command: ./gradlew build
- run:
name: ์์ค ์์ถ
command: |
zip back.zip -r ./* #ํ์ฌ ํด๋์ ํ์๋ด์ฉ๊น์ง ํฌํจํ์ฌ back.zipํ์ผ ์์ฑ
mkdir -p deploy
mv back.zip deploy/back.zip #back.zipํ์ผ deployํด๋๋ก ์ด๋
- persist_to_workspace: #build์ deploy ๋จ๊ณ๊ฐ ๋๋์ด์ก๊ธฐ๋๋ฌธ์ ์์ถํ ํ์ผ์ด deploy๋จ๊ณ์์ ์ฌ๋ผ์ง ์ ์๋ค
root: .
paths: deploy #deploy ํด๋๋ ๊ทธ๋๋ก ์ ์งํ๊ฒ ๋ค
deploy:
docker:
- image: circleci/python:2.7
steps:
- attach_workspace: #์ ์ฅํ ํด๋ ๊ฐ์ ธ์ค๊ธฐ
at: .
- aws-s3/copy:
from: deploy/* #deploy ๋ด๋ถ์ ๋ชจ๋ ํ์ผ์ aws s3๋ก ๋ณด๋ธ๋ค
to: 's3://ec2-s3-mybucket' #s3://์์ฑํ ๋ฒํท๋ช
aws-region: AWS_DEFAULT_REGION #CircleCI์ ์ค์ ํ Context์ ๋ด์ฉ์ด ๋ค์ด๊ฐ๊ฒ์ด๋ค
- aws-code-deploy/deploy-bundle:
application-name: EC2CodeDeployTest #CodeDeploy ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ ์์ฑ
deployment-group: EC2CodeDeployTestGroup #EC2CodeDeployTest๊ฐ ์ํ ๋ฐฐํฌ๊ทธ๋ฃน๋ช
์์ฑ
deployment-config: CodeDeployDefault.AllAtOnce #EC2CodeDeployTestGroup์ ๋ฐฐํฌ๊ทธ๋ฃน์ธ๋ถ์ ๋ณด์ ๋ฐฐํฌ๊ตฌ์ฑ์ ๊ฐ ์์ฑ
bundle-bucket: ec2-s3-mybucket #s3://์์ฑํ ๋ฒํท๋ช
bundle-key: back #๋ณด๋ด๋ ํ์ผ ์ด๋ฆ
bundle-type: zip #๋ณด๋ด๋ ํ์ผ ํ์ฅ์
workflows:
version: 2.1
build-deploy:
jobs:
- build
- deploy:
context: test #CircleCI์ ์ค์ ํ Context ์ด๋ฆ์ ์์ฑํ๋ค (aws ๊ณ์ ์ ๋ณด ๋ค์ด์๋)
requires:
- build
ํ๋ก์ ํธํด๋ > appspec.yml
version: 0.0
os: linux
files:
- source: / #CodeDeploy์์ ์ ๋ฌํด ์ค ํ์ผ ์ ๋ถ๋ฅผ destination์ผ๋ก ์ ๋ฌํ๊ฒ ๋ค
destination: /home/ubuntu/deploy
overwrite: yes
permissions: #CodeDeploy์์ ๋ฐ์ ํ์ผ์ ๊ถํ์ ์ค์ ํ๋ค (ubuntu๋ aws ec2 ๊ธฐ๋ณธ์ฌ์ฉ์)
- object: /
pattern: "**"
owner: ubuntu
group: ubuntu
hooks: #CodeDeploy๋ฐฐํฌ ๋จ๊ณ์์ ์คํํ ๋ช
๋ น์ด๋ฅผ ์ง์ ํฉ๋๋ค.
ApplicationStart: #deploy.sh๋ฅผ ubuntu๊ถํ์ผ๋ก ์คํํฉ๋๋ค.
- location: scripts/deploy.sh
timeout: 60 #์คํฌ๋ฆฝํธ ์คํ 60์ด ์ด์ ์ํ๋๋ฉด ์คํจ๊ฐ ๋ฉ๋๋ค.
runas: ubuntu
ํ๋ก์ ํธํด๋ > scripts > deploy.sh
#!/bin/bash
cd /home/ubuntu/deploy/build/libs
nohup java -jar jlpt-0.0.1-SNAPSHOT.jar > /home/ubuntu/jlpt/nohup.out 2>&1 &
# nohup์คํ ์ CodeDeploy๋ ๋ฌดํ ๋๊ธฐ ํฉ๋๋ค. ์ด ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด nohub.outํ์ผ์ ํ์ค ์
์ถ๋ ฅ์ฉ์ผ๋ก ๋ณ๋๋ก ์ฌ์ฉํฉ๋๋ค.
# ์ด๋ ๊ฒ ํ์ง ์์ผ๋ฉด nohup.outํ์ผ์ด ์๊ธฐ์ง ์๊ณ , CodeDeploy ๋ก๊ทธ์ ํ์ค ์
์ถ๋ ฅ์ด ์ถ๋ ฅ๋ฉ๋๋ค. nohub์ด ๋๋๊ธฐ ์ ๊น์ง CodeDeploy๋ ๋๋์ง ์์ผ๋ ๊ผญ ์ด๋ ๊ฒ ํด์ผํฉ๋๋ค.
ํ๋ก์ ํธํด๋ > src > main > resources > application.yml
spring:
datasource:
url: ${MY_POSTGRES_URL} #jdbc:postgresql://~~:5432/jlpt
username: ${MY_POSTGRES_USER}
password: ${MY_POSTGRES_PASSWORD}
#CircleCI Project Settings > Environment์ ์ ์๋ ๊ฐ๋ค์ด ๋ค์ด์ฌ ๊ฒ์ด๋ค
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQL10Dialect
show_sql: true
format_sql: true
CircleCI Context์ค์
AWS ํ๊ฒฝ๋ณ์ ์ ์ฅ
1. CircleCI > Organization Settings > Contexts > Create Context
2. Add Environment Variable ํด๋ฆญํ์ฌ 3๊ฐ์ง ๋ณ์๋ฅผ ์ถ๊ฐํด์ค๋ค.
default region์ ap-northeast-2(์์ธ)๋ก ์์ฑํ๊ณ , accesskey์ secretkey๋ [AWS IAM ์ฌ์ฉ์ ์ถ๊ฐ] ์์ ์ ์ฅํ csvํ์ผ์ ๋ด์ฉ์ ์์ฑํด์ค๋ค.
ํ๋ก์ ํธ ํ๊ฒฝ๋ณ์ ์ ์ฅ
Project๋ก ๋์ด์์ Project Settings > Environment Variables์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ์ ์ถ๊ฐํด์ค๋ค
๊นํ๋ธ ์์ค์ฝ๋ pushํ์ฌ ๋น๋ ๋ฐฐํฌ ํ์ธ
์ฐธ๊ณ
https://velog.io/@hwany/AWS-EC2-CodeDeploy-์ฐ๋ํ๊ธฐ
https://jojoldu.tistory.com/281
https://stackoverflow.com/questions/46195725/accessing-postgresql-9-6-from-spring-boot-in-circleci
https://www.sunny-son.space/AWS/Github%20Action%20CICD/
https://jinmay.github.io/2020/05/13/aws/how-to-install-code-deploy-agent-ubuntu/
https://backtony.github.io/spring/aws/2021-08-22-spring-cicd-2/
'๐งฐ DevOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
AWS Lambda | ๋๋ค๋? ๋์๋ฐฉ๋ฒ, DB ์ปค๋ฅ์ , InvocationType, Serverless (0) | 2022.09.18 |
---|---|
AWS S3 SFTP๋ก ์ ์ํ๊ธฐ (0) | 2022.06.01 |
CircleCI๋ก SpringBoot+Postgresql ํ๋ก์ ํธ ๋น๋ ๋ฐฐํฌํ๊ธฐ(2) (0) | 2022.03.18 |
CircleCI๋ก SpringBoot+Postgresql ํ๋ก์ ํธ ๋น๋ ๋ฐฐํฌํ๊ธฐ(1) (0) | 2022.03.18 |
AWS EC2 Jenkins ์ค์น (0) | 2022.03.18 |