Skip to content

Commit

Permalink
CI/CD (#2)
Browse files Browse the repository at this point in the history
## Изменения
Добавил раскатку в тест/препрод/прод
  • Loading branch information
dyakovri authored Aug 26, 2023
1 parent ea044a2 commit 831b851
Show file tree
Hide file tree
Showing 9 changed files with 475 additions and 3 deletions.
119 changes: 119 additions & 0 deletions .github/workflows/main_commit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
name: Тесты и раскатка в тестовую среду

on:
push:
branches: ['main']

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
test-style:
name: Проверяем стили
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@master

- uses: pnpm/action-setup@v2
with:
version: 7.26.3

- uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'pnpm'

- name: Install
run: pnpm install

- name: Check
run: pnpm lint && pnpm stylelint

# test:
# name: Выполняем тесты
# runs-on: ubuntu-latest
# steps:
# - name: Checkout repository
# uses: actions/checkout@master

# - uses: pnpm/action-setup@v2
# with:
# version: 7.26.3

# - uses: actions/setup-node@v3
# with:
# node-version: '18'
# cache: 'pnpm'

# - name: Install
# run: pnpm install

# - name: Check
# run: pnpm test

build-test-image:
name: Собираем тестовый Docker
runs-on: ubuntu-latest
needs:
# - test
- test-style
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@master

- name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=test,enable=true
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
file: ./deployment/Dockerfile
context: .
push: true
build-args: |
BUILD_MODE=testing
LAUNCH_MODE=testing
APP_VERSION=${{ github.ref_name }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

deploy-test:
name: Раскатываем тестовый Docker
runs-on: [self-hosted, Linux]
needs: build-test-image
environment:
name: Testing
url: https://app.test.profcomff.com/
env:
CONTAINER_NAME: com_profcomff_ui_floormap_test
permissions:
packages: read
steps:
- name: Run docker container
run: |
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test
docker stop ${{ env.CONTAINER_NAME }} || true && docker rm ${{ env.CONTAINER_NAME }} || true
docker run \
--detach \
--restart on-failure:3 \
--network=web \
--name ${{ env.CONTAINER_NAME }} \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test
152 changes: 152 additions & 0 deletions .github/workflows/main_release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
name: Тесты и раскатка в продакшн

on:
push:
tags:
- 'v*'

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build-preprod-image:
name: Собираем pre-prod Docker
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@master

- name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Define preprod metadata
id: meta-preprod
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=preprod,enable=true
- name: Build and push preprod Docker
uses: docker/build-push-action@v4
with:
file: ./deployment/Dockerfile
context: .
push: true
build-args: |
BUILD_MODE=production
LAUNCH_MODE=preprod
APP_VERSION=${{ github.ref_name }}
tags: ${{ steps.meta-preprod.outputs.tags }}
labels: ${{ steps.meta-preprod.outputs.labels }}

build-prod-image:
name: Собираем production Docker
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@master

- name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Define production metadata
id: meta-prod
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=tag,enable=true
type=raw,value=prod,enable=true
type=raw,value=latest,enable=true
- name: Build and push production Docker
uses: docker/build-push-action@v4
with:
file: ./deployment/Dockerfile
context: .
push: true
build-args: |
BUILD_MODE=production
LAUNCH_MODE=production
APP_VERSION=${{ github.ref_name }}
tags: ${{ steps.meta-prod.outputs.tags }}
labels: ${{ steps.meta-prod.outputs.labels }}

deploy-preprod:
name: Раскатываем pre-prod среду
runs-on: [self-hosted, Linux]
needs: build-preprod-image
environment:
name: Preprod
url: https://app.preprod.profcomff.com/
env:
CONTAINER_NAME: com_profcomff_ui_floormap_preprod
permissions:
packages: read
steps:
- name: Run docker container
run: |
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:preprod
docker stop ${{ env.CONTAINER_NAME }} || true && docker rm ${{ env.CONTAINER_NAME }} || true
docker run \
--detach \
--restart on-failure:3 \
--network=web \
--name ${{ env.CONTAINER_NAME }} \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:preprod
undeploy-preprod:
name: Останавливаем pre-prod среду
runs-on: [self-hosted, Linux]
needs: deploy-preprod
environment:
name: Preprod
env:
CONTAINER_NAME: com_profcomff_ui_floormap_preprod
permissions:
packages: read
steps:
- name: Stop docker container
run: |
docker stop ${{ env.CONTAINER_NAME }} || true && docker rm ${{ env.CONTAINER_NAME }} || true
deploy-production:
name: Раскатываем production среду
runs-on: [self-hosted, Linux]
needs: [deploy-preprod, build-prod-image]
environment:
name: Production
url: https://app.profcomff.com/
env:
CONTAINER_NAME: com_profcomff_ui_floormap
permissions:
packages: read
steps:
- name: Run docker container
run: |
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:prod
docker stop ${{ env.CONTAINER_NAME }} || true && docker rm ${{ env.CONTAINER_NAME }} || true
docker run \
--detach \
--restart always \
--network=web \
--name ${{ env.CONTAINER_NAME }} \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:prod
24 changes: 24 additions & 0 deletions .github/workflows/pr_close.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Тесты и раскатка на Pull Request (остановка)

on:
pull_request:
types: [closed]

jobs:
stop-deployment-dev:
name: Останавливаем dev среду
runs-on: ubuntu-latest
environment:
name: development-pr-${{ github.event.pull_request.number }}
steps:
- name: Stop deployment
run: |
curl -X 'POST' \
'https://ci.dev.profcomff.com/pr_stop' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: ${{ secrets.CI_DYAKOVSPACE_MSK_TOKEN }}' \
-d '{
"repo_url": "${{ github.repository }}",
"git_ref": "${{ github.ref }}"
}'
Loading

0 comments on commit 831b851

Please sign in to comment.