Search

bastion-deploy.yml

.github/workflows/bastion-deploy.yml
name: Deploy on: push: branches: [ "main" ] env: DOCKER_IMAGE: ghcr.io/${{ github.actor }}/redis-spring-server VERSION: ${{ github.sha }} NAME: redis-spring-server jobs: build: name: Build runs-on: ubuntu-latest steps: ## jdk setting - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'zulu' # https://github.com/actions/setup-java ## gradle caching - name: Gradle Caching uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: Create application.properties for CD Deploy run: | mkdir -p src/main/resources cd src/main/resources pwd echo "${{ secrets.DEPLOY_APPLICATION_PROPERTIES }}" > application.properties - name: Create cors.properties for CD Deploy run: | mkdir -p src/main/resources cd src/main/resources pwd echo "${{ secrets.DEPLOY_CORS_PROPERTIES }}" > cors.properties - name: Create redis.properties for CD Deploy run: | mkdir -p src/main/resources cd src/main/resources pwd echo "${{ secrets.DEPLOY_REDIS_PROPERTIES }}" > redis.properties - name: Create mysql.properties for CD Deploy run: | mkdir -p src/main/resources cd src/main/resources pwd echo "${{ secrets.DEPLOY_MYSQL_PROPERTIES }}" > mysql.properties - name: Grant execute permission for gradlew run: chmod +x gradlew ## gradle build - name: Build with Gradle run: ./gradlew build -x test ## docker build & push to production - name: Docker build & push to prod run: | echo ${{ secrets.GHCR_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin docker buildx create --name arm64builder --use docker buildx build --platform linux/amd64,linux/arm64 -f Dockerfile -t ghcr.io/annsunghee/redis-spring-server:latest --push . docker logout deploy: needs: build name: Deploy runs-on: [ self-hosted, deploy-redis-spring-backend ] steps: - name: Deploy to prod uses: appleboy/ssh-action@v0.1.10 env: GHCR_TOKEN: ${{ secrets.GHCR_TOKEN }} GITHUB_ACTOR: ${{ github.actor }} with: host: ${{ secrets.BASTION_HOST }} username: ec2-user key: ${{ secrets.BASTION_PRIVATE_KEY }} script_stop: true script: | cd deploy_scripts ./run_redis_backend_deploy.sh $GHCR_TOKEN $GITHUB_ACTOR
JSON
복사
name: Deploy: GitHub Actions 워크플로의 이름을 "Deploy"로 설정합니다.
on:: 워크플로를 시작할 트리거 이벤트를 나타냅니다.
push:: 푸시 이벤트(즉, 코드가 저장소로 푸시될 때)에서 워크플로가 트리거되도록 지정합니다.
branches: [ "main" ]: 코드가 main 분기로 푸시될 때만 워크플로가 실행됩니다. 워크플로 실행을 main 분기에 대한 변경 사항으로 제한합니다.
env:: 이 섹션은 워크플로우에서 사용될 환경 변수를 정의합니다.
DOCKER_IMAGE: 이 변수는 Redis Spring 서버의 Docker 이미지 저장소 이름을 저장합니다. GitHub 행위자(즉, 워크플로를 트리거한 GitHub 계정의 사용자 이름)를 사용하여 이미지 이름을 구성합니다. 예를 들어 GitHub 액터가 "john_doe"인 경우 이미지 이름은 "ghcr.io/john_doe/redis-spring-server"가 됩니다.
VERSION: 이 변수는 푸시된 코드의 GitHub SHA(커밋 해시)를 저장합니다. Docker 이미지의 버전으로 사용됩니다.
NAME: 이 변수는 Redis Spring 서버 애플리케이션의 이름을 저장합니다. "redis-spring-server"로 설정되어 있습니다.
jobs:: 이 섹션은 워크플로의 일부로 실행될 작업을 정의합니다.
build:: 첫 번째 작업의 이름이며 "Build"라고 합니다.
runs-on: ubuntu-latest: 최신 버전의 Ubuntu 운영 체제를 사용하여 GitHub에서 호스팅하는 실행기에서 작업이 실행되도록 지정합니다.
Steps
1.
actions/checkout@v3: 이 단계는 GitHub 리포지토리에서 코드를 체크아웃하여 후속 단계에서 소스 코드에 액세스할 수 있도록 합니다.
2.
actions/setup-java@v3: 이 단계는 Zulu 배포를 사용하여 JDK 17을 설정하여 애플리케이션 빌드에 필요한 Java 환경을 제공합니다.
3.
actions/cache@v3: 이 단계는 빌드 프로세스 속도를 높이기 위해 Gradle 종속성을 캐시합니다. 캐시된 디렉토리에는 ~/.gradle/caches 및 ~/.gradle/wrapper가 포함됩니다.
4.
Create application.properties for CD Deploy: 이 단계에서는 src/main/resources 디렉토리에 application.properties 파일을 생성합니다. 파일의 내용은 'DEPLOY_APPLICATION_PROPERTIES'라는 GitHub 비밀에서 가져오며 배포 관련 구성을 포함할 수 있습니다.
5.
Create cors.properties for CD Deploy: 이 단계에서는 이전 단계와 유사하게 src/main/resources 디렉토리에 cors.properties 파일을 생성합니다. 파일의 콘텐츠는 DEPLOY_CORS_PROPERTIES GitHub 암호에서 가져옵니다.
6.
Create redis.properties for CD Deploy: 이 단계에서는 이전 단계와 유사하게 src/main/resources 디렉토리에 redis.properties 파일을 생성합니다. 파일의 콘텐츠는 DEPLOY_REDIS_PROPERTIES GitHub 암호에서 가져옵니다.
7.
Create mysql.properties for CD Deploy: 이 단계에서는 이전 단계와 유사하게 src/main/resources 디렉토리에 mysql.properties 파일을 생성합니다. 파일의 콘텐츠는 DEPLOY_MYSQL_PROPERTIES GitHub 암호에서 가져옵니다.
8.
Grant execute permission for gradlew: 이 단계는 gradlew 스크립트에 실행 권한을 부여하여 다음 단계에서 실행할 수 있도록 합니다.
9.
Build with Gradle: 이 단계에서는 Gradle 빌드 명령(./gradlew build -x test)을 실행하여 테스트 실행(x test)을 제외하고 Spring Boot 애플리케이션을 빌드합니다.
10.
Docker build & push to prod: 이 단계는 애플리케이션용 Docker 이미지를 빌드하고 GitHub Container Registry(GHCR)로 푸시하는 일을 담당합니다. 이 프로세스에는 GHCR에 로그인하고, AMD64 및 ARM64 아키텍처를 모두 지원하는 다중 플랫폼 빌드를 만들고, 마지막으로 빌드된 이미지를 푸시하는 작업이 포함됩니다.
deploy:: 두 번째 작업의 이름이며 이름은 "Deploy"입니다.
needs: build: "배포" 작업이 "빌드" 작업의 성공적인 완료에 달려 있음을 나타냅니다. "구축" 작업이 성공한 경우에만 "배포" 작업이 실행되도록 합니다.
runs-on: [ self-hosted, deploy-redis-spring-backend ]: "배포" 작업이 "deploy-redis-spring-backend" 레이블이 있는 자체 호스팅 러너에서 실행되도록 지정합니다. 자체 호스팅 러너는 CI/CD 프로세스를 위한 사용자 지정 환경을 허용합니다.