-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ci/cd: Параллельные джобы для ускорения пайплайна
- Loading branch information
1 parent
6239399
commit bfc88f1
Showing
2 changed files
with
100 additions
and
40 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,17 +6,36 @@ on: | |
env: | ||
REGISTRY: ghcr.io | ||
IMAGE_TAG: latest | ||
FRONTEND_PATH: ./frontend | ||
BACKEND_PATH: ./backend | ||
DOCKER_COMPOSE_FILE: docker-compose.prod.yml | ||
|
||
jobs: | ||
publish-image: | ||
form-repository-lowercase-name: | ||
runs-on: ubuntu-latest | ||
outputs: | ||
repository_name_lowercase: ${{ steps.formatting.outputs.lowercase }} | ||
steps: | ||
# - name: Get repository code | ||
# uses: actions/checkout@v4 | ||
- name: Get repository name in lowercase | ||
id: formatting | ||
uses: ASzc/change-string-case-action@v5 | ||
with: | ||
string: ${{ github.repository }} | ||
|
||
build-and-push-frontend-image: | ||
needs: [form-repository-lowercase-name] | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: read | ||
packages: write | ||
outputs: | ||
image-name: ${{ steps.image-name.outputs.IMAGE_NAME }} | ||
steps: | ||
- name: Get repository code | ||
uses: actions/checkout@v4 | ||
- name: Log in to the Container registry | ||
- name: Log in container registry | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ${{ env.REGISTRY }} | ||
|
@@ -27,67 +46,109 @@ jobs: | |
uses: docker/metadata-action@v5 | ||
with: | ||
images: ${{ env.REGISTRY }}/${{ github.repository }} | ||
- name: Get image name in lowercase | ||
id: formatting | ||
uses: ASzc/change-string-case-action@v5 | ||
with: | ||
string: ${{ github.repository }} | ||
- name: Output Frontend Docker image name | ||
id: image-name | ||
run: echo "IMAGE_NAME=${{ env.REGISTRY }}/${{ needs.form-repository-lowercase-name.outputs.repository_name_lowercase }}-frontend:${{ env.IMAGE_TAG }}" >> "$GITHUB_OUTPUT" | ||
- name: Build and push Frontend Docker image | ||
uses: docker/build-push-action@v5 | ||
with: | ||
context: ./frontend | ||
file: ./frontend/Dockerfile | ||
context: ${{ env.FRONTEND_PATH }} | ||
file: ${{ env.FRONTEND_PATH }}/Dockerfile | ||
push: true | ||
tags: ${{ steps.meta.outputs.tags }},${{ env.REGISTRY }}/${{ steps.formatting.outputs.lowercase }}-frontend:${{env.IMAGE_TAG}} | ||
tags: ${{ steps.meta.outputs.tags }},${{ steps.image-name.outputs.IMAGE_NAME }} | ||
labels: ${{ steps.meta.outputs.labels }} | ||
|
||
build-and-push-backend-image: | ||
needs: [form-repository-lowercase-name] | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: read | ||
packages: write | ||
outputs: | ||
image-name: ${{ steps.image-name.outputs.IMAGE_NAME }} | ||
steps: | ||
- name: Get repository code | ||
uses: actions/checkout@v4 | ||
- name: Log in container registry | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ${{ env.REGISTRY }} | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
- name: Extract metadata (tags, labels) for Docker | ||
id: meta | ||
uses: docker/metadata-action@v5 | ||
with: | ||
images: ${{ env.REGISTRY }}/${{ github.repository }} | ||
- name: Output Backend Docker image name | ||
id: image-name | ||
run: echo "IMAGE_NAME=${{ env.REGISTRY }}/${{ needs.form-repository-lowercase-name.outputs.repository_name_lowercase }}-backend:${{ env.IMAGE_TAG }}" >> "$GITHUB_OUTPUT" | ||
- name: Build and push Backend Docker image | ||
uses: docker/build-push-action@v5 | ||
with: | ||
context: ./backend | ||
file: ./backend/Dockerfile | ||
context: ${{ env.BACKEND_PATH }} | ||
file: ${{ env.BACKEND_PATH }}/Dockerfile | ||
push: true | ||
tags: ${{ steps.meta.outputs.tags }},${{ env.REGISTRY }}/${{ steps.formatting.outputs.lowercase }}-backend:${{env.IMAGE_TAG}} | ||
tags: ${{ steps.meta.outputs.tags }},${{ steps.image-name.outputs.IMAGE_NAME }} | ||
labels: ${{ steps.meta.outputs.labels }} | ||
# TODO: убрать хардкоды из путей и тд | ||
|
||
pull-frontend-image: | ||
needs: [build-and-push-frontend-image] | ||
runs-on: ubuntu-latest | ||
steps: | ||
# - name: Get repository code | ||
# uses: actions/checkout@v4 | ||
- name: Pull latest Frontend Docker image | ||
uses: appleboy/[email protected] | ||
with: | ||
host: ${{ secrets.SERVER_IP }} | ||
username: ${{ secrets.SERVER_USERNAME }} | ||
password: ${{ secrets.SERVER_PASSWORD }} | ||
script: docker pull ${{ needs.build-and-push-frontend-image.outputs.image-name }} | ||
|
||
pull-backend-image: | ||
needs: [build-and-push-backend-image] | ||
runs-on: ubuntu-latest | ||
steps: | ||
# - name: Get repository code | ||
# uses: actions/checkout@v4 | ||
- name: Pull latest Backend Docker image | ||
uses: appleboy/[email protected] | ||
with: | ||
host: ${{ secrets.SERVER_IP }} | ||
username: ${{ secrets.SERVER_USERNAME }} | ||
password: ${{ secrets.SERVER_PASSWORD }} | ||
script: docker pull ${{ needs.build-and-push-backend-image.outputs.image-name }} | ||
|
||
deploy: | ||
needs: [publish-image] | ||
needs: [build-and-push-frontend-image, build-and-push-backend-image, pull-frontend-image, pull-backend-image] | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Get repository code | ||
uses: actions/checkout@v4 | ||
- name: Stop all containers | ||
uses: appleboy/[email protected] | ||
with: | ||
host: ${{ secrets.SERVER_IP }} | ||
username: ${{ secrets.SERVER_USERNAME }} | ||
password: ${{ secrets.SERVER_PASSWORD }} | ||
script: docker stop $(docker ps -a -q) | ||
- name: Pull latest frontend image version | ||
uses: appleboy/[email protected] | ||
with: | ||
host: ${{ secrets.SERVER_IP }} | ||
username: ${{ secrets.SERVER_USERNAME }} | ||
password: ${{ secrets.SERVER_PASSWORD }} | ||
script: docker pull ${{ env.REGISTRY }}/${{ github.repository }}-frontend:${{env.IMAGE_TAG}} | ||
- name: Pull latest backend image version | ||
# - name: Get repository code | ||
# uses: actions/checkout@v4 | ||
- name: Stop docker compose | ||
uses: appleboy/[email protected] | ||
with: | ||
host: ${{ secrets.SERVER_IP }} | ||
username: ${{ secrets.SERVER_USERNAME }} | ||
password: ${{ secrets.SERVER_PASSWORD }} | ||
script: docker pull ${{ env.REGISTRY }}/${{ github.repository }}-backend:${{env.IMAGE_TAG}} | ||
- name: Copy docker compose config to remote server | ||
script: docker compose -f /tmp/${{ env.DOCKER_COMPOSE_FILE }} down | ||
- name: Copy docker compose to remote server | ||
uses: appleboy/[email protected] | ||
with: | ||
host: ${{ secrets.SERVER_IP }} | ||
username: ${{ secrets.SERVER_USERNAME }} | ||
password: ${{ secrets.SERVER_PASSWORD }} | ||
source: "docker-compose.prod.yml" | ||
source: ${{ env.DOCKER_COMPOSE_FILE }} | ||
target: /tmp | ||
- name: Run container | ||
- name: Run docker compose | ||
uses: appleboy/[email protected] | ||
with: | ||
host: ${{ secrets.SERVER_IP }} | ||
username: ${{ secrets.SERVER_USERNAME }} | ||
password: ${{ secrets.SERVER_PASSWORD }} | ||
script: NOTISEND_TOKEN=${{ secrets.NOTISEND_TOKEN }} docker compose -f /tmp/docker-compose.prod.yml up -d | ||
script: | | ||
NOTISEND_TOKEN=${{ secrets.NOTISEND_TOKEN }} \ | ||
FRONT_IMAGE=${{ needs.build-and-push-frontend-image.outputs.image-name }} \ | ||
BACK_IMAGE=${{ needs.build-and-push-backend-image.outputs.image-name }} \ | ||
docker compose -f /tmp/${{ env.DOCKER_COMPOSE_FILE }} up -d |
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