106 lines
4.5 KiB
YAML
106 lines
4.5 KiB
YAML
name: Deploy
|
|
|
|
# Ручной запуск из вкладки Actions в Gitea — как "Run pipeline" в GitLab
|
|
# с выбором, что именно катить: back / front / всё сразу.
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
target:
|
|
description: "Что деплоим"
|
|
type: choice
|
|
default: all
|
|
options:
|
|
- back
|
|
- front
|
|
- all
|
|
|
|
jobs:
|
|
build-backend:
|
|
if: ${{ inputs.target == 'back' || inputs.target == 'all' }}
|
|
runs-on: ubuntu-latest
|
|
# node:20-bookworm вместо docker:24-cli: Alpine-образы (docker:24-cli,
|
|
# alpine/helm) виснут/рвутся на скачивании с некоторых внешних CDN
|
|
# (dl-cdn.alpinelinux.org, get.helm.sh — Docker Hub, npm registry,
|
|
# github.com, download.docker.com при этом работают нормально; похоже
|
|
# на что-то в сети/фаерволе, специфичное для конкретных CDN, не на IPv6
|
|
# как казалось сначала). node:20-bookworm (Debian) уже проверенно
|
|
# работает + там сразу есть node для actions/checkout.
|
|
# Docker CLI ставим статическим бинарником с download.docker.com —
|
|
# без apt/apk, без лишних сетевых плясок.
|
|
container:
|
|
image: node:20-bookworm
|
|
outputs:
|
|
tag: ${{ steps.vars.outputs.tag }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- id: vars
|
|
run: echo "tag=${{ gitea.sha }}" >> "$GITEA_OUTPUT"
|
|
|
|
- name: Install docker CLI
|
|
run: |
|
|
curl -4 -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-27.3.1.tgz -o /tmp/docker.tgz
|
|
tar xzf /tmp/docker.tgz --strip-components=1 -C /usr/local/bin docker/docker
|
|
docker version --format 'client ok: {{.Client.Version}}'
|
|
|
|
- name: Docker login
|
|
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USER }}" --password-stdin
|
|
|
|
- name: Build backend image
|
|
run: docker build -f deployment/charts/back/Dockerfile --target architector -t kayashov/architector:${{ steps.vars.outputs.tag }} .
|
|
|
|
- name: Push backend image
|
|
run: docker push kayashov/architector:${{ steps.vars.outputs.tag }}
|
|
|
|
deploy-backend:
|
|
if: ${{ inputs.target == 'back' || inputs.target == 'all' }}
|
|
needs: build-backend
|
|
runs-on: ubuntu-latest
|
|
# get.helm.sh и GitHub release-assets рвут соединение в этой сети (даже
|
|
# с -4) — прекращаем качать helm во время пайплайна и берём готовый
|
|
# образ с уже вшитым helm (deployment/ci/toolbox.Dockerfile). Собрать и
|
|
# запушить один раз:
|
|
# docker build -f deployment/ci/toolbox.Dockerfile -t kayashov/ci-toolbox:latest .
|
|
# docker push kayashov/ci-toolbox:latest
|
|
container:
|
|
image: kayashov/ci-toolbox:latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Configure kubectl access
|
|
run: |
|
|
mkdir -p ~/.kube
|
|
echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > ~/.kube/config
|
|
# быстрая проверка вместо невнятной "localhost:8080" от helm,
|
|
# если секрет KUBE_CONFIG пуст/не тот
|
|
grep -q "apiVersion" ~/.kube/config || (echo "KUBE_CONFIG пуст или не base64 валидного kubeconfig — проверь секрет в Settings -> Actions -> Secrets" && exit 1)
|
|
|
|
- name: Helm upgrade backend
|
|
run: |
|
|
helm upgrade -i architector ./deployment/charts/back \
|
|
-f ./deployment/values.yaml \
|
|
--set global.version=${{ needs.build-backend.outputs.tag }} \
|
|
--namespace media
|
|
|
|
build-front:
|
|
if: ${{ inputs.target == 'front' || inputs.target == 'all' }}
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: node:20-bookworm
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: npm ci && build
|
|
working-directory: front
|
|
run: |
|
|
npm ci
|
|
npm run build
|
|
|
|
# /front-build смонтирован в раннер как тот же hostPath, что
|
|
# front-под берёт под nginx (см. deployment/ci/runner-deployment.yaml).
|
|
# Новый билд подхватится сразу, без рестарта пода.
|
|
- name: Publish static files
|
|
run: |
|
|
rm -rf /front-build/*
|
|
cp -r front/build/* /front-build/
|