Continuous Integration #58
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: Continuous Integration | |
on: | |
push: | |
branches: | |
- main | |
workflow_dispatch: | |
jobs: | |
build-backend: | |
name: Generate and Push Backend Image | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Prepare Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'temurin' | |
java-version: '17' | |
- name: Check and Build All | |
run: ./scripts/build-all | |
- name: Docker Login | |
run: docker login --username=$DOCKER_USERNAME --password=$DOCKER_PASSWORD | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Build Docker Image | |
run: docker build -t $DOCKER_ADDRESS/$DOCKER_REPO_NAME:$(date "+%Y%m%d") . | |
env: | |
DOCKER_ADDRESS: ${{ secrets.DOCKER_ADDRESS }} | |
DOCKER_REPO_NAME: ${{secrets.DOCKER_REPO_NAME}} | |
- name: Push Docker Image | |
run: docker push $DOCKER_ADDRESS/$DOCKER_REPO_NAME:$(date "+%Y%m%d") | |
env: | |
DOCKER_ADDRESS: ${{ secrets.DOCKER_ADDRESS }} | |
DOCKER_REPO_NAME: ${{secrets.DOCKER_REPO_NAME}} | |
deploy-backend: | |
name: Deploy Backend | |
runs-on: ubuntu-latest | |
needs: build-backend | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Set Secret Key for Publish | |
run: | | |
sudo tee /home/id_rsa <<- EOF | |
$DEPLOY_KEY | |
EOF | |
env: | |
DEPLOY_KEY: ${{secrets.DEPLOY_KEY}} | |
- name: Remove Previous Docker Container | |
run: ssh -i /home/id_rsa -p 1022 $TARGET_MACHINE -o "StrictHostKeyChecking no" "docker rm -f hare.backend||true" | |
env: | |
TARGET_MACHINE: ${{ secrets.TARGET_MACHINE }} | |
- name: Pull Docker Image | |
run: ssh -i /home/id_rsa -p 1022 $TARGET_MACHINE -o "StrictHostKeyChecking no" "docker pull $DOCKER_ADDRESS/$DOCKER_REPO_NAME:$(date "+%Y%m%d")" | |
env: | |
TARGET_MACHINE: ${{ secrets.TARGET_MACHINE }} | |
DOCKER_ADDRESS: ${{ secrets.DOCKER_ADDRESS }} | |
DOCKER_REPO_NAME: ${{secrets.DOCKER_REPO_NAME }} | |
- name: Run Docker Container | |
run: ssh -i /home/id_rsa -p 1022 $TARGET_MACHINE -o "StrictHostKeyChecking no" "docker run --name hare.backend -d -p 21000:8080 -e spring.profiles.active=prod -e spring.datasource.url='$DB_URL' -e spring.datasource.username=$DB_USERNAME -e spring.datasource.password=$DB_PW --restart always $DOCKER_ADDRESS/$DOCKER_REPO_NAME:$(date "+%Y%m%d")" | |
env: | |
TARGET_MACHINE: ${{ secrets.TARGET_MACHINE }} | |
DB_URL: ${{secrets.DB_URL }} | |
DOCKER_ADDRESS: ${{ secrets.DOCKER_ADDRESS }} | |
DOCKER_REPO_NAME: ${{secrets.DOCKER_REPO_NAME }} | |
DB_USERNAME: ${{secrets.DB_USERNAME }} | |
DB_PW: ${{secrets.DB_PW }} | |
build-frontend: | |
name: Generate and Push Frontend Image | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install Dependencies | |
run: yarn install | |
working-directory: frontends/hare.webui | |
- name: Check all | |
run: yarn test:unit:coverage | |
working-directory: frontends/hare.webui | |
- name: Build all | |
run: yarn build | |
working-directory: frontends/hare.webui | |
- name: Docker Login | |
run: docker login --username=$DOCKER_USERNAME --password=$DOCKER_PASSWORD | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Build Docker Image | |
run: docker build -t $DOCKER_ADDRESS/$DOCKER_REPO_NAME_FE:$(date "+%Y%m%d") . | |
working-directory: frontends/hare.webui | |
env: | |
DOCKER_ADDRESS: ${{ secrets.DOCKER_ADDRESS }} | |
DOCKER_REPO_NAME_FE: ${{secrets.DOCKER_REPO_NAME_FE}} | |
- name: Push Docker Image | |
run: docker push $DOCKER_ADDRESS/$DOCKER_REPO_NAME_FE:$(date "+%Y%m%d") | |
env: | |
DOCKER_ADDRESS: ${{ secrets.DOCKER_ADDRESS }} | |
DOCKER_REPO_NAME_FE: ${{secrets.DOCKER_REPO_NAME_FE}} | |
deploy-frontend: | |
name: Deploy Frontend | |
runs-on: ubuntu-latest | |
needs: build-frontend | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Set Secret Key for Publish | |
run: | | |
sudo tee /home/id_rsa <<- EOF | |
$DEPLOY_KEY | |
EOF | |
env: | |
DEPLOY_KEY: ${{secrets.DEPLOY_KEY}} | |
- name: Remove Previous Docker Container | |
run: ssh -i /home/id_rsa -p 1022 $TARGET_MACHINE -o "StrictHostKeyChecking no" "docker rm -f hare.frontend||true" | |
env: | |
TARGET_MACHINE: ${{ secrets.TARGET_MACHINE }} | |
- name: Pull Docker Image | |
run: ssh -i /home/id_rsa -p 1022 $TARGET_MACHINE -o "StrictHostKeyChecking no" "docker pull $DOCKER_ADDRESS/$DOCKER_REPO_NAME_FE:$(date "+%Y%m%d")" | |
env: | |
TARGET_MACHINE: ${{ secrets.TARGET_MACHINE }} | |
DOCKER_ADDRESS: ${{ secrets.DOCKER_ADDRESS }} | |
DOCKER_REPO_NAME_FE: ${{secrets.DOCKER_REPO_NAME_FE}} | |
- name: Run Docker Container | |
run: ssh -i /home/id_rsa -p 1022 $TARGET_MACHINE -o "StrictHostKeyChecking no" "docker run --name hare.frontend -d -p 11001:80 --restart always $DOCKER_ADDRESS/$DOCKER_REPO_NAME_FE:$(date "+%Y%m%d")" | |
env: | |
TARGET_MACHINE: ${{ secrets.TARGET_MACHINE }} | |
DOCKER_ADDRESS: ${{ secrets.DOCKER_ADDRESS }} | |
DOCKER_REPO_NAME_FE: ${{secrets.DOCKER_REPO_NAME_FE}} |