github actions를 이용해 다음과 같이 main.yml을 구성하고 있었음
name: Java CI with Gradle
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'zulu'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
- name: Docker build
run: |
docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} -p ${{ secrets.DOCKER_HUB_PASSWORD }}
docker build -t spring-cicd .
docker tag spring-cicd ${{ secrets.DOCKER_HUB_USERNAME }}/spring-cicd:${GITHUB_SHA::7}
docker push ${{ secrets.DOCKER_HUB_USERNAME }}/spring-cicd:${GITHUB_SHA::7}
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
- name: Start Session Manager session
run: aws ssm start-session --target i-018c5463cd86d3de3
- name: Deploy to Server
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ap-northeast-2
run: |
aws ssm send-command \\
--instance-ids i-018c5463cd86d3de3 \\
--document-name "AWS-RunShellScript" \\
--parameters "commands=[
'if sudo docker ps -a --format \\\\'{{.Names}}\\\\' | grep -q \\\\'^server$\\\\'; then',
' sudo docker stop server',
' sudo docker rm server',
'fi',
'sudo docker pull whgkswo/spring-cicd:${GITHUB_SHA::7}',
'sudo docker tag whgkswo/spring-cicd:${GITHUB_SHA::7} spring-cicd',
'sudo docker run -d --name server -p 8080:8080 \\\\
-e AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }} \\\\
-e AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }} \\\\
-e DOCKER_HUB_USERNAME=${{ secrets.DOCKER_HUB_USERNAME }} \\\\
-e DOCKER_HUB_PASSWORD=${{ secrets.DOCKER_HUB_PASSWORD }} \\\\
-e JWT_KEY=${{ secrets.JWT_KEY }} \\\\
-e JWT_ACCESS_TOKEN_EXPIRATION_MINUTES=${{ secrets.JWT_ACCESS_TOKEN_EXPIRATION_MINUTES }} \\\\
-e JWT_REFRESH_TOKEN_EXPIRATION_MINUTES=${{ secrets.JWT_REFRESH_TOKEN_EXPIRATION_MINUTES }} \\\\
-e SPRING_DATASOURCE_URL=${{ secrets.SPRING_DATASOURCE_URL }} \\\\
-e SPRING_DATASOURCE_USERNAME=${{ secrets.SPRING_DATASOURCE_USERNAME }} \\\\
-e SPRING_DATASOURCE_PASSWORD=${{ secrets.SPRING_DATASOURCE_PASSWORD }} \\\\
-e MAIL_ADDRESS_ADMIN=${{ secrets.MAIL_ADDRESS_ADMIN }} \\\\
-e SPRING_MAIL_USERNAME=${{ secrets.SPRING_MAIL_USERNAME }} \\\\
spring-cicd'
]" \\
--output text
깃헙에 푸시하면 빌드는 정상적으로 이루어지는데, ec2에서 docker 컨테이너를 생성하지 못하는 문제가 발생하였음
무엇이 문제인지 짐작할 수가 없어 환경 변수를 전부 삭제하고 시도해 봄 → 됨
그럼 어떤 환경 변수가 문제를 일으키는가? → 모름
전부 뺀 상태로 하나씩 추가해 보면 원인을 특정함
문제는 아래 라인이었음
-e SPRING_DATASOURCE_URL=${{ secrets.SPRING_DATASOURCE_URL }} \\\\
그렇다면 이게 왜 문제가 되는가?
깃헙 레포지토리의 secrets에 해당 변수를 이렇게 넣어둠
jdbc:mysql://shoecream-database.c5c80myyqjso.ap-northeast-2.rds.amazonaws.com:13306/shoecream?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
여기서 쿼리 파라미터가 포함되면 안 된다고 함