Update README.md #98
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Java CI with Gradle | |
on: | |
push: | |
branches: [ "master" ] | |
permissions: | |
contents: read | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: checkout | |
uses: actions/checkout@v3 | |
- name: Set up JDK 11 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '11' | |
distribution: 'temurin' | |
## create application.yml | |
- name: make application.yml | |
run: | | |
cd ./src/main/resources | |
## application.yml 파일 생성 | |
touch ./application.yml | |
## GitHub-Actions 에서 설정한 값을 application.yml 파일에 쓰기 | |
echo "${{ secrets.APPLICATION }}" >> ./application.yml | |
## application-oauth2.yml 파일 생성 | |
touch ./application-oauth2.yml | |
## GitHub-Actions 에서 설정한 값을 application-oauth2.yml 파일에 쓰기 | |
echo "${{ secrets.APPLICATION_OAUTH2 }}" >> ./application-oauth2.yml | |
shell: bash | |
## build Docker and Push Docker Hub | |
- name: build with Gradle | |
run: ./gradlew --exclude-task test | |
- name: build Docker | |
run: | | |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} | |
docker build -t ${{ secrets.DOCKER_REPO }} . | |
docker push ${{ secrets.DOCKER_REPO }}:latest | |
- name: Run scripts in server | |
uses: appleboy/ssh-action@master | |
with: | |
key: ${{ secrets.SSH_KEY }} | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USERNAME }} | |
script: | | |
sudo docker pull ${{ secrets.DOCKER_REPO }}:latest | |
echo "실행 중인 도커 확인.." | |
RUNNING_SERVER=$(sudo docker ps --format 'table{{.Names}}' | grep AA) | |
if [ -z "${RUNNING_SERVER}"] | |
then | |
echo "BB 가 실행중입니다. BB -> AA 서버 교체를 진행합니다.." | |
START_CONTAINER=AA | |
TERMINATE_CONTAINER=BB | |
START_PORT=8080 | |
TERMINATE_PORT=8081 | |
sudo docker run -d -p 8080:8080 --name AA --log-driver=awslogs --log-opt awslogs-region=ap-northeast-2 --log-opt awslogs-group=${{ secrets.LOG_GROUP_NAME }} --log-opt awslogs-stream=${{ secrets.LOG_STREAM_NAME }} ${{ secrets.DOCKER_REPO }} | |
else | |
echo "AA가 실행중입니다. AA -> BB 서버 교체를 진행합니다.." | |
START_CONTAINER=BB | |
TERMINATE_CONTAINER=AA | |
START_PORT=8081 | |
TERMINATE_PORT=8080 | |
sudo docker run -d -p 8081:8080 --name BB --log-driver=awslogs --log-opt awslogs-region=ap-northeast-2 --log-opt awslogs-group=${{ secrets.LOG_GROUP_NAME }} --log-opt awslogs-stream=${{ secrets.LOG_STREAM_NAME }} ${{ secrets.DOCKER_REPO }} | |
fi | |
for cnt in {1..10} | |
do | |
echo "check server start.." | |
UP=$(curl -s http://127.0.0.1:${START_PORT}/actuator/health | grep 'UP') | |
if [ -z "${UP}" ] | |
then | |
echo "서버가 아직 실행되지 않았습니다.." | |
else | |
echo "서버 실행이 확인 되었습니다." | |
break | |
fi | |
echo "10초간 대기 합니다.." | |
sleep 10 | |
done | |
if [ $cnt -eq 10 ] | |
then | |
echo "deployment failed." | |
exit 1 | |
fi | |
echo "server start!" | |
echo "change nginx server port" | |
sudo sed -i "s/${TERMINATE_PORT}/${START_PORT}/" /etc/nginx/conf.d/service-url.inc | |
sudo service nginx restart | |
sudo docker stop ${TERMINATE_CONTAINER} | |
sudo docker rm ${TERMINATE_CONTAINER} | |
sudo docker image prune -f | |