nhnacademy-aiot1-5 / docs

프로젝트 관련 문서 저장소입니다.
MIT License
0 stars 0 forks source link

GitHub에서 설정한 Secrets and Variables를 SpringBoot 프로젝트에 적용하는 방법 #63

Open codethestudent opened 2 months ago

codethestudent commented 2 months ago

깃허브에서 설정한 시크릿 환경변수 스프링 부트 프로젝트에 적용하는 방법


깃허브에서 git actions를 java with maven으로 설정하면 리포지토리에 자동으로 maven.yml파일이 생성됩니다.

그리고 우리가 리포지토리에는 저장하고 싶지만 외부에는 알려주고 싶지 않은 시크릿 키들을 보통 github Secrets and Variables에 저장하죠.

저장된 키들은 maven.yml 파일에 ${{ secrets.저장한변수명 }} 이런식으로 사용가능합니다.

하지만 application.properties나 application.yml에서 해당 환경 변수를 사용하고 싶을때는 maven.yml파일을 아래와 같이 설정해봅시다.


1. sed 사용법

name: Java CI with Maven

on:
    push:
        branches: [ "fix/sonarqube-plugin" ]
    pull_request:
        branches: [ "fix/sonarqube-plugin" ]

jobs:
    build:
        runs-on: ubuntu-latest
        env: # 환경 변수 등록
          SECRET_KEY: ${{ secrets.SECRET_KEY }}
          DISCOVERY_ADDRESS: ${{ secrets.DISCOVERY_ADDRESS }}
          DISCOVERY_ID: ${{ secrets.DISCOVERY_ID }}
          DISCOVERY_PW: ${{ secrets.DISCOVERY_PW }}
        steps:
          - uses: actions/checkout@v3
          - name: Set up JDK 11
            uses: actions/setup-java@v3
            with:
              java-version: '11'
              distribution: 'temurin'
              cache: maven
          - name: Prepare application.properties
            run: |
              sed -i 's/\${SECRET_KEY}/'"$SECRET_KEY"'/g' src/main/resources/application.properties
              sed -i 's/\${DISCOVERY_ADDRESS}/'"$DISCOVERY_ADDRESS"'/g' src/main/resources/application.properties
              sed -i 's/\${DISCOVERY_ID}/'"$DISCOVERY_ID"'/g' src/main/resources/application.properties
              sed -i 's/\${DISCOVERY_PW}/'"$DISCOVERY_PW"'/g' src/main/resources/application.properties

          - name: Build with Maven
            run: mvn -B package --file pom.xml -e -X

          - name: Run SonarQube
            run: mvn sonar:sonar -Dsonar.projectKey=ioteatime-auth-service-project-key -Dsonar.host.url=${{secrets.SONAR_HOST}} -Dsonar.login=${{secrets.SONAR_TOKEN}}

          - name: upload file
            uses: appleboy/scp-action@master
            with:
              host: ${{ secrets.SSH_IP }}
              username: ${{ secrets.SSH_ID }}
              key: ${{ secrets.SSH_KEY }}
              port: ${{ secrets.SSH_PORT }}
              source: "target/*.jar"
              target: "~/"
              rm: false

sed 명령어란?

sed는 Stream Editor의 약자로, 텍스트 파일의 내용을 처리(읽기, 변환, 출력 등)하기 위한 명령어 라인 유틸리티입니다. 특히 텍스트 파일 내에서 문자열을 검색하고 대체할 때 많이 사용됩니다.

기본 사용법
sed [옵션]... [스크립트] [입력 파일]...

그럼 아래 명령어를 볼까요?

sed -i 's/\${SECRET_KEY}/'"$SECRET_KEY"'/g' src/main/resources/application.properties

2. echo 사용법

name: Java CI with Maven

on:
    push:
        branches: [ "fix/delete-instance-name" ]
    pull_request:
        branches: [ "fix/delete-instance-name" ]

jobs:
    build:
        runs-on: ubuntu-latest
        env: # 환경 변수 등록
            SECRET_KEY: ${{ secrets.SECRET_KEY }}
            DISCOVERY_ADDRESS: ${{ secrets.DISCOVERY_ADDRESS }}
            DISCOVERY_ID: ${{ secrets.DISCOVERY_ID }}
            DISCOVERY_PW: ${{ secrets.DISCOVERY_PW }}

        steps:
            - uses: actions/checkout@v3
            - name: Set up JDK 11
              uses: actions/setup-java@v3
              with:
                java-version: '11'
                distribution: 'temurin'
                cache: maven

            - name: Prepare application.properties
              run: |
                echo "SECRET_KEY=$SECRET_KEY" >> .env
                echo "DISCOVERY_ADDRESS=$DISCOVERY_ADDRESS" >> .env
                echo "DISCOVERY_ID=$DISCOVERY_ID" >> .env
                echo "DISCOVERY_PW=$DISCOVERY_PW" >> .env

            - name: Build with Maven
              run: mvn -B package --file pom.xml

            - name: Run SonarQube
              run: mvn sonar:sonar -Dsonar.projectKey=ioteatime-auth-service-project-key -Dsonar.host.url=${{secrets.SONAR_HOST}} -Dsonar.login=${{secrets.SONAR_TOKEN}}

            - name : upload file
              uses: appleboy/scp-action@master
              with:
                host: ${{ secrets.SSH_IP }}
                username: ${{ secrets.SSH_ID }}
                key: ${{ secrets.SSH_KEY }}
                port: ${{ secrets.SSH_PORT }}
                source: "target/*.jar"
                target: "~/"
                rm: false

echo 명령어란?

echo는 주로 셸 스크립트나 커맨드 라인에서 문자열이나 변수의 내용을 출력하기 위해 사용되는 명령어입니다. 여기서는 .env 파일을 생성하거나 기존 파일에 환경 변수의 값을 추가하는 데 사용되고 있습니다.

"SECRET_KEY=$SECRET_KEY": 이 부분에서 SECRET_KEY 환경 변수의 값과 함께 SECRET_KEY= 문자열을 출력하고, 이를 .env 파일에 추가합니다. $SECRET_KEY는 위에서 정의한 환경 변수를 참조합니다.

' >>.env: '이 구문은 출력된 내용을 .env 파일의 끝에 추가(리다이렉션)합니다. 파일이 존재하지 않으면 생성됩니다. 이 코드는 .env 파일에 환경 변수들의 이름과 값을 기록하여, 애플리케이션 실행 시 이 파일을 참조하거나, 개발/운영 환경에서 환경 변수를 관리하는 데 사용될 수 있습니다.

결론적으로 본 프로젝트에서 secret을 환경변수로 만들어 sed 혹은 echo명령어를 maven.yml 파일에 저장하여 ioteatime 프로젝트 내에서도 유용하게 사용할 수 있겠죠?