하지만 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
sed: Stream Editor의 약자로, 텍스트 스트림을 수정하는 명령어입니다.
-i: 입력 파일을 직접 수정하는 in-place 옵션을 의미합니다.
's/\${SECRET_KEY}/'"$SECRET_KEY"'/g': 이 부분은 실제 대체 작업을 정의합니다.
s: 대체(substitute) 작업을 수행하겠다는 sed의 명령어입니다.
/\${SECRET_KEY}/: 대체할 대상 문자열을 정규 표현식으로 지정합니다. 여기서는 리터럴 문자열 ${SECRET_KEY}를 찾습니다. \는 $가 변수를 참조하는 특수 문자임을 탈출하여, 리터럴 달러 기호($)를 의미하게 합니다.
'"$SECRET_KEY"'/: 대체할 새 문자열입니다. 여기서 환경 변수 SECRET_KEY의 값을 삽입합니다. 외부 쉘 변수를 참조하기 위해 두 가지 따옴표를 사용합니다. 외부 따옴표(')는 sed 명령어의 일부를 구성하고, 내부 따옴표(")는 쉘에 환경 변수의 값을 확장하도록 지시합니다.
/g: 전역(global) 검색 플래그로, 파일 내의 모든 ${SECRET_KEY} 인스턴스를 대체하라는 의미입니다.
src/main/resources/application.properties: 대체 작업을 수행할 파일의 경로입니다.
echo는 주로 셸 스크립트나 커맨드 라인에서 문자열이나 변수의 내용을 출력하기 위해 사용되는 명령어입니다.
여기서는 .env 파일을 생성하거나 기존 파일에 환경 변수의 값을 추가하는 데 사용되고 있습니다.
"SECRET_KEY=$SECRET_KEY": 이 부분에서 SECRET_KEY 환경 변수의 값과 함께 SECRET_KEY= 문자열을 출력하고, 이를 .env 파일에 추가합니다.
$SECRET_KEY는 위에서 정의한 환경 변수를 참조합니다.
' >>.env: '이 구문은 출력된 내용을 .env 파일의 끝에 추가(리다이렉션)합니다. 파일이 존재하지 않으면 생성됩니다.
이 코드는 .env 파일에 환경 변수들의 이름과 값을 기록하여, 애플리케이션 실행 시 이 파일을 참조하거나, 개발/운영 환경에서 환경 변수를 관리하는 데 사용될 수 있습니다.
결론적으로 본 프로젝트에서 secret을 환경변수로 만들어 sed 혹은 echo명령어를 maven.yml 파일에 저장하여 ioteatime 프로젝트 내에서도 유용하게 사용할 수 있겠죠?
깃허브에서 설정한 시크릿 환경변수 스프링 부트 프로젝트에 적용하는 방법
깃허브에서 git actions를 java with maven으로 설정하면 리포지토리에 자동으로 maven.yml파일이 생성됩니다.
그리고 우리가 리포지토리에는 저장하고 싶지만 외부에는 알려주고 싶지 않은 시크릿 키들을 보통 github Secrets and Variables에 저장하죠.
저장된 키들은 maven.yml 파일에 ${{ secrets.저장한변수명 }} 이런식으로 사용가능합니다.
하지만 application.properties나 application.yml에서 해당 환경 변수를 사용하고 싶을때는 maven.yml파일을 아래와 같이 설정해봅시다.
1. sed 사용법
sed 명령어란?
sed는 Stream Editor의 약자로, 텍스트 파일의 내용을 처리(읽기, 변환, 출력 등)하기 위한 명령어 라인 유틸리티입니다. 특히 텍스트 파일 내에서 문자열을 검색하고 대체할 때 많이 사용됩니다.
기본 사용법
그럼 아래 명령어를 볼까요?
2. echo 사용법
echo 명령어란?
echo는 주로 셸 스크립트나 커맨드 라인에서 문자열이나 변수의 내용을 출력하기 위해 사용되는 명령어입니다. 여기서는 .env 파일을 생성하거나 기존 파일에 환경 변수의 값을 추가하는 데 사용되고 있습니다.
"SECRET_KEY=$SECRET_KEY": 이 부분에서 SECRET_KEY 환경 변수의 값과 함께 SECRET_KEY= 문자열을 출력하고, 이를 .env 파일에 추가합니다. $SECRET_KEY는 위에서 정의한 환경 변수를 참조합니다.
' >>.env: '이 구문은 출력된 내용을 .env 파일의 끝에 추가(리다이렉션)합니다. 파일이 존재하지 않으면 생성됩니다. 이 코드는 .env 파일에 환경 변수들의 이름과 값을 기록하여, 애플리케이션 실행 시 이 파일을 참조하거나, 개발/운영 환경에서 환경 변수를 관리하는 데 사용될 수 있습니다.
결론적으로 본 프로젝트에서 secret을 환경변수로 만들어 sed 혹은 echo명령어를 maven.yml 파일에 저장하여 ioteatime 프로젝트 내에서도 유용하게 사용할 수 있겠죠?