안녕하세요 상훈입니다.
Github Action 기능을 사용하여 Ubuntu 서버에 소스를 push 했을 때 자동으로 build, deploy 를 하는 방법을 기록하도록 하겠습니다.
Ubuntu 18.04
Code: Spring boot (Java, jdk11, gradle)
Action 동작 시기 : push 후
동작 방법: ssh
1. Server 에서 ssh private_key 발급
2. GitHub Action 작성
3. GitHub secret 변수 설정
4. Activate
문서의 간결성을 위해 문서를 분리하였습니다. 아래 링크 참조 혹은 ChatGPT 한테 물어보면 바로 답해줍니다.
2023.03.24 - [Linux] - [Linux] key-gen : ssh 하는 방법
그 다음에는 Github Action 코드를 작성할건데요,
set up a workflow yourtself 를 눌러서 진행하거나, 아래 MarketPlace 에 이미 작성되어져 있는 초안을 가져와도 무방합니다.
*.yml 이라는 파일 형식을 지키고 원하는대로 만들어줍니다. (파일명이라 원하는대로 만들어도 무방합니다.)
name: Gradle Package
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-18.04 #build 하는 환경 설정
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11' #java 버전 설정
distribution: 'temurin'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
#grant : 권한 할당을 통하여 gradlew 명령어를 통해 build 가능하도록 설정
- name: Run chmod to make gradlew executable
run: chmod +x ./gradlew
#build : 위에서 권한을 준 명령어로 build
- name: Build with Gradle
run: ./gradlew build
#전송할 파일을 담을 디렉토리 생성
- name: Make Directory for deliver
run: mkdir deploy
#Jar 파일을 deploy 디렉토리에 Copy
- name: Copy Jar
run: cp ./build/libs/*.jar ./deploy/
#서버에 Deploy
- name: Deploy to server
env:
PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} # private key
HOST: ${{ secrets.SERVER_HOST }} # server host (ip addr)
USERNAME: ${{ secrets.SERVER_USERNAME }} # username (로그인할 id)
PORT: ${{ secrets.SERVER_PORT }} # port (포트포워딩한 포트번호)
#password: ${{ secrets.NPC_DEV_SERVER_PASSWORD }} # 비밀번호설정했을 경우 작성(저는 enter로 뺐습니다.)
run: |
echo "$PRIVATE_KEY" > private_key.pem # private key 값-> private_key.pem 로 생성
chmod 400 private_key.pem # 권한 설정 600이상일경우 안되는 경우가 있음
# scp: 서버간 파일전송 명령어 : 위치= /var/www/html/test에 넣었는데, 원하는 경로로 변경해주세요
scp -i private_key.pem -P $PORT -o StrictHostKeyChecking=no -r build/libs/*.jar $USERNAME@$HOST:/var/www/html/test/
# ssh 통해서 서버에 접속하여 bash 명령어 실행, 마찬가지로 위에서 변경한 경로와 일치시켜주세요
ssh -i private_key.pem -p $PORT -o StrictHostKeyChecking=no $USERNAME@$HOST 'bash -s' <<- EOF
pgrep java | xargs kill -9 || true
nohup java -jar /var/www/html/test/*.jar > /dev/null 2>&1 & disown
exit
EOF
rm -f private_key.pem #작업완료 후 pem 삭제
env: 의 내용은 github action 의 [3. GitHub secret 변수 설정] 에서 설정할 것입니다.
각각의 내용의 주석을 꼼꼼히 읽어주시고, 작성 후 create commit 을 해서 remote 에 넣어주세요!
.yml 파일 생성 완료!
위에서 작성한 내용중 env : 에서 써놓은 key 값들을 작성하려고 합니다.
분리하는 이유: 누군가 제 repository 에 들어와서 모든 값들을 yml 파일로 확인할 수 있기 때문에 github 의 secret 기능을 설정. (환경변수 설정과 동일)
[ Settings - Secrets and variables - Actions ] 탭에 들어갑니다.
New repository secret 을 눌러 새로운 키를 생성한다고 말해줍니다.
json 형태의 Key: value 라고 생각하면 간단합니다.
이녀석들을 작성합니다.
여기서 다른것들은 그냥 작성하면 되는데, PRIVATE_KEY 는 양식이 있었습니다.
이미지처럼 BEGIN~ 에 해당하는 내용을 입력해서 넣어야합니다. (그래야 저같은 삽질을 하지 않을 수 있습니다 ㅎㅎ)
ssh-gen 을 하게되면 public 과 private Key가 각각 생성되는데, .pub 자가 붙지 않은 것이 private key 입니다. 참고 바랍니다.
그리고 이제 대망의 action을 활성화 해본다면?
끝입니다.
제가 고생한 흔적
[나는 리뷰어다] 팀 개발을 위한 Git, GitHub 시작하기(개정판) (0) | 2023.06.23 |
---|---|
[gh-page] deploy 에러 해결 / ENOENT: no such file or directory, stat ~ (0) | 2022.12.07 |
[GitLab-SourceTree] 깃랩-소스트리 연결하는방법 (0) | 2022.12.02 |
[GitLab] Personal Access Token 생성하기/방법 (0) | 2022.12.01 |
[Git-Hub] 깃허브에 폴더가 안올라감 해결 / does not have a commit checked out (0) | 2022.11.14 |
댓글 영역