1. 문제 상황

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 컨테이너를 생성하지 못하는 문제가 발생하였음

2-1. 문제 원인 파악

무엇이 문제인지 짐작할 수가 없어 환경 변수를 전부 삭제하고 시도해 봄 → 됨

그럼 어떤 환경 변수가 문제를 일으키는가? → 모름

전부 뺀 상태로 하나씩 추가해 보면 원인을 특정함

문제는 아래 라인이었음

-e SPRING_DATASOURCE_URL=${{ secrets.SPRING_DATASOURCE_URL }} \\\\

2-2. 문제 원인

그렇다면 이게 왜 문제가 되는가?

깃헙 레포지토리의 secrets에 해당 변수를 이렇게 넣어둠

jdbc:mysql://shoecream-database.c5c80myyqjso.ap-northeast-2.rds.amazonaws.com:13306/shoecream?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC

여기서 쿼리 파라미터가 포함되면 안 된다고 함