WEB(API Server)은 IoT와 App과 데이터를 주고받고저장하는 역할을 하므로 다른 분야와의 협업과 연동을 위해서 API Server는 빠르게 개발되어야 하고 다른 분야에 제공하는 API의 코드가 최신 상태여야 한다. 따라서 아래와 같은 CI/CD 도구를 이용하여 협업 간의 효율을 높였다.
Github Actions
프로젝트에서 Github Actions과 AWS CodeDeploy를 이용하여 CI(지속적 통합)/CD(지속적 제공)를 적용하여 리포지토리에 커밋과 동시에 빌드를 진행하고 PR의 머지가 될 때 원격 서버에 자동으로 배포가 되게 하여 짧은 주기로 다른 분야 개발자들에게 제공하였다.
Github에서 push 이벤트가 발생하면 Github Actions로 trigger를 한다.
Github Actions에서는 정해진 Job과 Step에 따라 빌드를 하고 소스 코드를 *.jar 파일로 만들어 소스 코드와 함께 압축하여 AWS S3에 저장한다.
AWS CodeDeploy에 배포 요정을 하면 AWS S3에 저장되어 있는 압축된 소스 코드와 *.jar 파일을 가져와 원격 서버(AWS EC2)에 배포한다.
Github Actions workflow
deploy.yml
# This workflow will build a Java project with Gradle# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name:Java CI with Gradleenv:PROJECT_NAME:WEB_KookMoBan_PonJohmNaimannon:push:branches: - '*'# matches every branch that doesn't contain a '/' - '*/*'# matches every branch containing a single '/' - '**'# matches every branchjobs:deploy:name:DEPLOYruns-on:ubuntu-18.04steps: - name:Checkoutuses:actions/checkout@v2 - name:Set up JDK 1.8uses:actions/setup-java@v1with:java-version:1.8 - name:Grant execute permission for gradlewrun:chmod +x gradlewshell:bash - name:Build with Gradlerun:./gradlew buildshell:bash - name:Make zip filerun:zip -qq -r ./$GITHUB_SHA.zip .shell:bash - name:Configure AWS credentialsuses:aws-actions/configure-aws-credentials@v1with:aws-access-key-id:${{ secrets.AWS_ACCESS_KEY_ID }}aws-secret-access-key:${{ secrets.AWS_SECRET_ACCESS_KEY }}aws-region:ap-northeast-2 - name:Upload to S3run:aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://osam-s3/$PROJECT_NAME/$GITHUB_SHA.zip - name:Code Deploy run: aws deploy create-deployment --application-name OSAM_Hackathon --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name dev --s3-location bucket=osam-s3,bundleType=zip,key=$PROJECT_NAME/$GITHUB_SHA.zip