TODO
11/26 회의 내용 정리, 정리한 내용 기반으로 README에 도식화
인프라 작업
Github Action
- AWS
EC2
외부 접속 (ssh key 등록)
RDS 연동 → 화요일
CodeDeploy
플러그인 jacoco, sonarqube
보일러 플레이트 리뷰 (로이 O, 푸글 O)
Github Action
github actions 를 실행시켜줄
deploy.yaml
파일을 다음과 같습니다. 코드가 너무 길어질 것을 대비해서 어떤 작업을 하는지만 적어놓겠습니다.steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 // JDK set up - name: Set up JDK 1.11 uses: actions/setup-java@v1 with: java-version: 1.11 // gradlew 실행권한 추가 - name: Grant execute permission for gradlew run: chmod +x ./gradlew shell: bash // gradle 빌드 명령 - name: Build with Gradle run: ./gradlew build shell: bash - name: Make zip file run: zip -r ./$GITHUB_SHA.zip . shell: bash // AWS IAM credentials - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_REGION }} // s3에 업로드하는 aws cli 명령어 - name: Upload to S3 run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip // code deploy를 진행하는 aws cli 명령어 - name: Code Deploy run: aws deploy create-deployment --application-name modi-github-actions-deploy --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name modi-codeDeploy-s3-group --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$GITHUB_SHA.zip
CodeDeploy
codeDeploy를 동작시키기 위해선 프로젝트 최상단에
appspec.yaml
파일이 필요합니다.version: 0.0 os: linux files: - source: / destination: /home/ubuntu/action overwrite: yes permissions: - object: / pattern: "**" owner: ubuntu group: ubuntu
JaCoCo
Java 코드의 커버리지를 체크하는 라이브러리. 테스트코드를 돌리고 그 커버리지 결과를 눈으로 보기 좋도록 html이나 xml, csv 같은 리포트로 생성해줌
plugins { id 'jacoco' } test { // finalizedBy 'jacocoTestReport' } jacocoTestReport { reports { html.enabled true html.destination file("$buildDir/jacocoHtml") } afterEvaluate { classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, excludes: [ //제외할 파일들 ex. '**/com/kdt/localinfo/error/**' ] ) })) } finalizedBy 'jacocoTestCoverageVerification' } jacocoTestCoverageVerification { violationRules { rule { enabled = true element = 'BUNDLE' limit { counter = 'LINE' value = 'COVEREDRATIO' minimum = 0.70 } excludes = [] } } }

Sonarqube
AWS
EC2
- ubuntu 20.04
- t2 micro
- 스토리지: 8GB (level up?)
- 보안 그룹:
- 22: SSH, 터미널 접속용
- 푸글
- 로이
- 로사
- 8080: 웹 접속용
- 태그 추가
- Name: modi
- key pair
- 인스턴스 이름:
- elastic IP 바인딩
Host ~EC2 HostName 3.36.79.180 User ubuntu IdentityFile ~/.ssh/localinfo.pem
java 11 설치
타임존 변경
- 기존 UTC → KST
RDS
deploy scripts example
#!/bin/bash REPOSITORY=/home/ubuntu/action/modi? PROJECT_NAME=modi BUILD_JAR=$(ls /home/ubuntu/action/build/libs/*.jar) JAR_NAME=$(basename $BUILD_JAR) echo "> Build 파일명: $JAR_NAME" >> /home/ubuntu/action/deploy.log echo "> Build 파일 복사" >> /home/ec2-user/action/deploy.log DEPLOY_PATH=/home/ec2-user/action/ cp $BUILD_JAR $DEPLOY_PATH echo "> 현재 구동 중인 애플리케이션 pid 확인" >> /home/ec2-user/action/deploy.log CURRENT_PID=$(pgrep -fl ${PROJECT_NAME} | grep jar | awk '{print $1}') echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID" if [ -z "$CURRENT_PID" ]; then echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다." >> /home/ec2-user/action/deploy.log else echo "> kill -15 $CURRENT_PID" kill -15 $CURRENT_PID sleep 5 fi DEPLOY_JAR=$DEPLOY_PATH$JAR_NAME echo "> 새 어플리케이션 배포" >> /home/ec2-user/action/deploy.log echo "> JAR Name: $JAR_NAME" echo "> JAR_NAME에 실행권한 추가" chmod +x $JAR_NAME echo "> $JAR_NAME 실행" nohup java -jar -Dspring.profiles.active=prod $JAR_NAME > $REPOSITORY/nohup.out 2>&1 & # (ls -tr $REPOSITORY/jar/*.jar | tail -n 1)