[RELEASE] CD using Github self-hosted runner #21
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: "[RELEASE] CD using Github self-hosted runner" | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- release | |
paths: | |
- 'backend/**' | |
env: | |
ARTIFACT_NAME: review-me-prod | |
ARTIFACT_DIRECTORY: ./backend/build/libs | |
APPLICATION_DIRECTORY: /home/ubuntu/review-me | |
jobs: | |
build: | |
name: Build Dockerfile and push to DockerHub | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout to current repository | |
uses: actions/checkout@v4 | |
- name: Setup JDK Corretto using cached gradle dependencies | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'corretto' | |
java-version: 17 | |
cache: 'gradle' | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v3 | |
with: | |
gradle-version: 8.8 | |
- name: Build and test with gradle | |
run: | | |
cd ./backend | |
./gradlew clean bootJar | |
- name: Login to DockerHub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_ID }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and push | |
uses: docker/build-push-action@v6 | |
with: | |
context: ./backend | |
platforms: linux/amd64,linux/arm64 | |
push: true | |
tags: ${{ secrets.DOCKERHUB_ID }}/review-me-app:latest | |
deploy: | |
name: Deploy via self-hosted runner | |
needs: build | |
strategy: | |
matrix: | |
runner: [prod-a, prod-b] | |
runs-on: [ self-hosted, "${{ matrix.runner }}" ] | |
steps: | |
- name: Checkout to secret repository | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ secrets.PRIVATE_REPOSITORY_URL }} | |
token: ${{ secrets.PRIVATE_REPOSITORY_TOKEN }} | |
ref: develop | |
- name: Move application-related files to local | |
run: | | |
mkdir -p ${{ env.APPLICATION_DIRECTORY }}/app | |
mv ./app/* ./app/.* ${{ env.APPLICATION_DIRECTORY }}/app | |
- name: Login to DockerHub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_ID }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Pull from DockerHub | |
run: | | |
sudo docker-compose --env-file .env.prod down || true | |
sudo docker pull ${{ secrets.DOCKERHUB_ID }}/review-me-app | |
sudo docker-compose --env-file .env.prod up -d | |
working-directory: ${{ env.APPLICATION_DIRECTORY }}/app |