finish working on the article - need test workflows
All checks were successful
Release Build / create-builder-docker-image (push) Successful in 3m45s
All checks were successful
Release Build / create-builder-docker-image (push) Successful in 3m45s
This commit is contained in:
@@ -52,7 +52,8 @@ jobs:
|
||||
create-release:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: golang:1.21
|
||||
# image: golang:1.21
|
||||
image: ${DOCKERHUB_USERNAME}/my-build-golang-runner:latest
|
||||
needs: create-docker-image
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
|
50
.gitea/workflows/build_build.yaml
Normal file
50
.gitea/workflows/build_build.yaml
Normal file
@@ -0,0 +1,50 @@
|
||||
name: Release Build
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- builder-*
|
||||
|
||||
jobs:
|
||||
create-builder-docker-image:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: docker:28.3.2-dind
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
run: |
|
||||
# Install git
|
||||
apk add --no-cache git
|
||||
|
||||
echo "=== GitHub Variables ==="
|
||||
echo "github.ref = ${{ github.ref }}"
|
||||
echo "github.ref_name = ${{ github.ref_name }}"
|
||||
echo "github.sha = ${{ github.sha }}"
|
||||
echo "github.repository = ${{ github.repository }}"
|
||||
echo "========================"
|
||||
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
||||
cd hello_gitea
|
||||
git checkout ${{ github.ref }}
|
||||
|
||||
- name: Setup Docker Buildx
|
||||
run: |
|
||||
# Docker is already installed in docker:dind image
|
||||
docker --version
|
||||
# Setup Docker Buildx for multi-platform builds
|
||||
docker buildx create --use
|
||||
docker buildx inspect --bootstrap
|
||||
|
||||
- name: Login to Docker Hub
|
||||
run: |
|
||||
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
|
||||
|
||||
- name: Build multi-platform Docker images
|
||||
run: |
|
||||
cd hello_gitea
|
||||
# Build multi-platform images using buildx
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--tag ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:${{ github.ref_name }} \
|
||||
--tag ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest \
|
||||
--push \
|
||||
.
|
||||
|
13
Dockerfile_for_runner_image
Normal file
13
Dockerfile_for_runner_image
Normal file
@@ -0,0 +1,13 @@
|
||||
# Используем образ Go с поддержкой мультиплатформенности
|
||||
FROM golang:1.24
|
||||
|
||||
# Устанавливаем пакеты (одинаково работают на amd64/arm64)
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
git \
|
||||
ca-certificates \
|
||||
jq && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# (Опционально) Можно добавить команду по умолчанию
|
||||
CMD ["bash"]
|
8
build_image_for_runner.sh
Normal file
8
build_image_for_runner.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--tag ${DOCKERHUB_USERNAME}/my-build-golang-runner:latest \
|
||||
--push \
|
||||
-f Dockerfile_for_runner_image \
|
||||
.
|
@@ -1,59 +0,0 @@
|
||||
name: Release Build
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v*
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: golang:1.21
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
run: |
|
||||
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
|
||||
cd hello_gitea
|
||||
git checkout ${{ github.ref }}
|
||||
|
||||
- name: Setup Go
|
||||
run: |
|
||||
# Install jq for JSON parsing
|
||||
apt-get update && apt-get install -y jq
|
||||
git --version
|
||||
go version
|
||||
jq --version
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cd hello_gitea
|
||||
mkdir -p bin
|
||||
go build -o bin/hello-api-${{ github.ref_name }} main.go
|
||||
ls -la bin/
|
||||
|
||||
- name: Create Release
|
||||
run: |
|
||||
cd hello_gitea
|
||||
# Create release using Gitea API
|
||||
curl -X POST \
|
||||
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"tag_name": "${{ github.ref_name }}",
|
||||
"name": "Release ${{ github.ref_name }}",
|
||||
"body": "Automated release",
|
||||
"draft": false,
|
||||
"prerelease": false
|
||||
}' \
|
||||
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases"
|
||||
|
||||
# Upload asset
|
||||
RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
||||
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/tags/${{ github.ref_name }}" | \
|
||||
jq -r '.id')
|
||||
|
||||
curl -X POST \
|
||||
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
|
||||
-H "Content-Type: application/octet-stream" \
|
||||
--data-binary @bin/hello-api-${{ github.ref_name }} \
|
||||
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/$RELEASE_ID/assets?name=hello-api-${{ github.ref_name }}"
|
15
cert.yaml
15
cert.yaml
@@ -1,15 +0,0 @@
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
annotations:
|
||||
name: root-somedomain-ru
|
||||
namespace: default
|
||||
spec:
|
||||
commonName: somedomain.ru
|
||||
dnsNames:
|
||||
- somedomain.ru
|
||||
- www.somedomain.ru
|
||||
issuerRef:
|
||||
kind: ClusterIssuer
|
||||
name: letsencrypt-dns-cloudflare
|
||||
secretName: le-root-somedomain-ru
|
@@ -1,10 +1,13 @@
|
||||
# Настройка Gitea Actions для Go проекта: Полное руководство
|
||||
|
||||
---
|
||||
**readTime:** 15-20 минут
|
||||
**date:** 2025-07-27 18:00
|
||||
**author:** Direct-Dev(aka Антон Кузнецов)
|
||||
**level:** Средний
|
||||
**tags:** #gitea #gitea-actions #ci-cd #go #docker #devops #automation #k3s
|
||||
**version:** 1.0.0
|
||||
---
|
||||
|
||||
## Содержание
|
||||
|
||||
@@ -357,33 +360,71 @@ jobs:
|
||||
done
|
||||
```
|
||||
|
||||
### Объяснение workflow
|
||||
### Разберемся как работает workflow
|
||||
|
||||
**Триггеры:**
|
||||
- Workflow запускается при создании тега, начинающегося с `v*` (например, `v1.0.0`)
|
||||
|
||||
**Jobs:**
|
||||
|
||||
1. **create-docker-image:**
|
||||
- Использует Docker-in-Docker контейнер
|
||||
- Настраивает Docker Buildx для мультиплатформенной сборки
|
||||
- Авторизуется в Docker Hub
|
||||
- Собирает образы для Linux AMD64 и ARM64
|
||||
- Публикует образы с тегом версии и `latest`
|
||||
1. **create-docker-image:** - создание образов docker с нашим проектом
|
||||
- Используем Docker-in-Docker контейнер (image: docker:28.3.2-dind)
|
||||
- Настраиваем Docker Buildx для мультиплатформенной сборки (docker buildx create --use docker buildx inspect --bootstrap)
|
||||
- Авторизуемч в Docker Hub (echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin)
|
||||
- Собирает образы для Linux AMD64 и ARM64 (docker buildx build \ ...)
|
||||
- Публикует образы с тегом версии и `latest` (--push)
|
||||
|
||||
чтобы авторизация сработала на докерхабе надо внести секреты DOCKERHUB_TOKEN, DOCKERHUB_USERNAME или вцелом для всей gitea в настройках или в настройках конкретного репозитория
|
||||
я использовал докерхаб, но можно заморочиться и настроить работу с приватным репозиторием ...
|
||||
|
||||
2. **create-release:**
|
||||
- Запускается после успешной сборки Docker образов
|
||||
- Использует Go контейнер для сборки бинарников
|
||||
- Использует Go контейнер для сборки бинарников (image: golang:1.21)
|
||||
- Собирает бинарники для всех платформ (Linux, Windows, macOS)
|
||||
- Создает архивы с бинарниками
|
||||
- Создает релиз через Gitea API
|
||||
- Загружает бинарники как assets релиза
|
||||
|
||||
при каждом запуске, как я понимаю, данного job будет скачиваться и устанавливаться в контейнере, созданном на базе golang:1.21
|
||||
|
||||
```yaml
|
||||
- name: Setup Go
|
||||
run: |
|
||||
# Install jq for JSON parsing
|
||||
apt-get update && apt-get install -y jq
|
||||
git --version
|
||||
go version
|
||||
jq --version
|
||||
```
|
||||
|
||||
решение как говорится в лоб: чтобы убрать эту работу при каждом выполнении workflow надо сделать свой образ
|
||||
|
||||
``` Dockerfile
|
||||
FROM golang:1.24
|
||||
|
||||
# Install some packages
|
||||
RUN apt-get update && apt-get install -y git ca-certificates jq
|
||||
```
|
||||
|
||||
собрать его и запушить (желательно с мультиплатформенностью). конечно если вам не надо билдить образы для разных платформ тогда все попроще
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--tag ${DOCKERHUB_USERNAME}/my-build-golang-runner:latest \
|
||||
--push \
|
||||
-f Dockerfile_for_runner_image \
|
||||
.
|
||||
```
|
||||
|
||||
|
||||
## Настройка секретов
|
||||
|
||||
### Необходимые секреты
|
||||
|
||||
В настройках репозитория → "Secrets and variables" → "Actions" добавьте следующие секреты:
|
||||
В настройках репозитория (или инстанса) → "Secrets and variables" → "Actions" добавьте следующие секреты:
|
||||
|
||||
1. **GITEATOKEN**
|
||||
- Токен доступа к Gitea API
|
||||
@@ -403,24 +444,30 @@ jobs:
|
||||
1. Перейдите в настройки профиля → "Applications"
|
||||
2. Создайте новый токен с правами на репозиторий
|
||||
3. Скопируйте токен
|
||||
4. В разделе Actions репозитория создайте секрет уровня репозитория - я создал с именем GITEATOKEN (такой не даст сделать: GITEA_TOKEN)
|
||||
|
||||
**Docker Hub Token:**
|
||||
1. Войдите в Docker Hub
|
||||
2. Перейдите в Account Settings → Security
|
||||
3. Создайте новый Access Token
|
||||
4. Скопируйте токен
|
||||
5. В разделе Actions настроек инстанса gitea создайте секреты уровня инстанса (если много пользователей работает в gitea, то можно внести в уровень репозитория) я создал с именами DOCKERHUB_USERNAME, DOCKERHUB_TOKEN
|
||||
|
||||
## Тестирование и запуск
|
||||
|
||||
### Локальное тестирование
|
||||
|
||||
1. **Проверьте синтаксис workflow:**
|
||||
1. **Проверим синтаксис workflow:**
|
||||
|
||||
ну если мы в ide то наверное все автоматом отформатировано
|
||||
но тем не менее ...
|
||||
|
||||
```bash
|
||||
# Убедитесь, что YAML синтаксис корректен
|
||||
yamllint .gitea/workflows/build.yaml
|
||||
```
|
||||
|
||||
2. **Протестируйте сборку локально:**
|
||||
2. **Протестируем сборку локально:**
|
||||
```bash
|
||||
# Сборка для текущей платформы
|
||||
go build -o hello-api main.go
|
||||
@@ -444,23 +491,143 @@ jobs:
|
||||
|
||||
### Запуск Actions
|
||||
|
||||
1. **Создайте тег:**
|
||||
1. **Создаем тег:**
|
||||
```bash
|
||||
git tag v1.0.0
|
||||
git push origin v1.0.0
|
||||
|
||||
git tag v1.1.20
|
||||
git push origin v1.1.20
|
||||
|
||||
# или скрипт
|
||||
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Интерактивный скрипт для автоматизации релиза
|
||||
# Использование: ./scripts/release-interactive.sh [version]
|
||||
# Если версия не указана, скрипт запросит её интерактивно
|
||||
|
||||
set -e # Остановить выполнение при ошибке
|
||||
|
||||
# Функция для получения версии интерактивно
|
||||
get_version_interactive() {
|
||||
echo "🚀 Создание нового релиза"
|
||||
echo ""
|
||||
|
||||
# Показываем текущую версию
|
||||
CURRENT_VERSION=$(grep 'const version = "' main.go | sed 's/const version = "\([^"]*\)"/\1/')
|
||||
echo "📋 Текущая версия: $CURRENT_VERSION"
|
||||
echo ""
|
||||
|
||||
# Запрашиваем новую версию
|
||||
read -p "Введите новую версию (формат X.Y.Z): " VERSION
|
||||
|
||||
# Проверяем, что версия не пустая
|
||||
if [ -z "$VERSION" ]; then
|
||||
echo "❌ Версия не может быть пустой"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем формат версии
|
||||
if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "❌ Неверный формат версии. Используйте формат X.Y.Z (например, 1.0.25)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Подтверждение
|
||||
echo ""
|
||||
echo "📝 Подтверждение:"
|
||||
echo " Текущая версия: $CURRENT_VERSION"
|
||||
echo " Новая версия: $VERSION"
|
||||
echo ""
|
||||
read -p "Продолжить? (y/N): " CONFIRM
|
||||
|
||||
if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then
|
||||
echo "❌ Релиз отменен"
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
# Проверяем, передана ли версия как аргумент
|
||||
if [ $# -eq 0 ]; then
|
||||
# Версия не указана, запрашиваем интерактивно
|
||||
get_version_interactive
|
||||
else
|
||||
# Версия указана как аргумент
|
||||
VERSION=$1
|
||||
|
||||
# Проверка формата версии
|
||||
if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "Ошибка: Неверный формат версии. Используйте формат X.Y.Z (например, 1.0.25)"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "🚀 Начинаем релиз версии v$VERSION..."
|
||||
|
||||
# Проверяем, что мы в git репозитории
|
||||
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
||||
echo "Ошибка: Не найден git репозиторий"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем, что нет незакоммиченных изменений
|
||||
# if ! git diff-index --quiet HEAD --; then
|
||||
# echo "Ошибка: Есть незакоммиченные изменения. Сначала закоммитьте их."
|
||||
# exit 1
|
||||
# fi
|
||||
|
||||
# Обновляем версию в main.go
|
||||
echo "📝 Обновляем версию в main.go..."
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# macOS
|
||||
sed -i '' "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go
|
||||
else
|
||||
# Linux
|
||||
sed -i "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go
|
||||
fi
|
||||
|
||||
# Проверяем, что изменение применилось
|
||||
if ! grep -q "const version = \"$VERSION\"" main.go; then
|
||||
echo "Ошибка: Не удалось обновить версию в main.go"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Версия обновлена в main.go"
|
||||
|
||||
# Выполняем git команды
|
||||
echo "📦 Добавляем изменения в git..."
|
||||
git add .
|
||||
|
||||
echo "💾 Создаем коммит..."
|
||||
git commit -m "Release v$VERSION"
|
||||
|
||||
echo "🏷️ Создаем тег..."
|
||||
git tag -a "v$VERSION" -m "Release v$VERSION"
|
||||
|
||||
echo "🚀 Отправляем изменения и теги..."
|
||||
git push
|
||||
git push --tags
|
||||
|
||||
echo "🎉 Релиз v$VERSION успешно завершен!"
|
||||
echo "📋 Выполненные действия:"
|
||||
echo " - Обновлена версия в main.go"
|
||||
echo " - Создан коммит с сообщением 'Release v$VERSION'"
|
||||
echo " - Создан тег v$VERSION"
|
||||
echo " - Изменения отправлены в удаленный репозиторий"
|
||||
|
||||
```
|
||||
|
||||
2. **Мониторинг выполнения:**
|
||||
- Перейдите в репозиторий → "Actions"
|
||||
- Найдите запущенный workflow
|
||||
- Отслеживайте выполнение каждого job
|
||||
- Переходим в репозиторий → "Actions"
|
||||
- Находим запущенный workflow
|
||||
- Отслеживаем выполнение каждого job
|
||||
|
||||
### Ожидаемый результат
|
||||
|
||||
После успешного выполнения:
|
||||
|
||||
1. **Docker образы** будут опубликованы в Docker Hub:
|
||||
- `username/hello-api:v1.0.0`
|
||||
- `username/hello-api:v1.1.20`
|
||||
- `username/hello-api:latest`
|
||||
|
||||
2. **Релиз** будет создан в Gitea с бинарниками:
|
||||
@@ -475,47 +642,29 @@ jobs:
|
||||
### Просмотр логов
|
||||
|
||||
1. **В Gitea:**
|
||||
- Перейдите в репозиторий → "Actions"
|
||||
- Выберите workflow
|
||||
- Нажмите на job для просмотра логов
|
||||
- Переходим в репозиторий → "Actions"
|
||||
- Выберем workflow
|
||||
- Нажмем на job для просмотра логов
|
||||
|
||||
2. **Отладка ошибок:**
|
||||
- Проверьте правильность секретов
|
||||
- Убедитесь в корректности путей к репозиторию
|
||||
- Проверьте права доступа токенов
|
||||
- Проверим правильность секретов
|
||||
- Убедимся в корректности путей к репозиторию
|
||||
- Проверим права доступа токенов
|
||||
|
||||
### Частые проблемы
|
||||
|
||||
1. **Ошибка авторизации в Docker Hub:**
|
||||
- Проверьте правильность `DOCKERHUB_TOKEN`
|
||||
- Убедитесь, что токен не истек
|
||||
- Проверим правильность `DOCKERHUB_TOKEN`
|
||||
- Убедимся, что токен не истек
|
||||
|
||||
2. **Ошибка создания релиза:**
|
||||
- Проверьте права токена `GITEATOKEN`
|
||||
- Убедитесь, что тег не существует
|
||||
- Проверим права токена `GITEATOKEN`
|
||||
- Убедимся, что тег не существует
|
||||
|
||||
3. **Ошибка сборки:**
|
||||
- Проверьте зависимости в `go.mod`
|
||||
- Убедитесь в корректности Dockerfile
|
||||
- Проверим зависимости в `go.mod`
|
||||
- Убедимся в корректности Dockerfile
|
||||
|
||||
### Оптимизация
|
||||
|
||||
1. **Кэширование зависимостей:**
|
||||
```yaml
|
||||
- name: Cache Go modules
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
~/.cache/go-build
|
||||
~/go/pkg/mod
|
||||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-go-
|
||||
```
|
||||
|
||||
2. **Параллельная сборка:**
|
||||
- Разделите сборку бинарников на отдельные jobs
|
||||
- Используйте matrix strategy для разных платформ
|
||||
|
||||
## Заключение
|
||||
|
||||
@@ -537,10 +686,10 @@ jobs:
|
||||
|
||||
### Следующие шаги
|
||||
|
||||
1. Добавьте тестирование в workflow
|
||||
2. Настройте автоматическое развертывание
|
||||
3. Добавьте уведомления о результатах сборки
|
||||
4. Настройте мониторинг и алерты
|
||||
1. тестирование в workflow
|
||||
2. автоматическое развертывание
|
||||
3. уведомления о результатах сборки
|
||||
4. мониторинг и алерты
|
||||
|
||||
Gitea Actions предоставляет мощные возможности для автоматизации процессов разработки, и с правильной настройкой вы можете значительно упростить процесс доставки вашего ПО.
|
||||
|
||||
@@ -1254,7 +1403,7 @@ systemctl status gitea-runner
|
||||
|
||||
### Настройка мониторинга
|
||||
|
||||
1. **Создание скрипта мониторинга:**
|
||||
1. ** Cкрипт мониторинга:**
|
||||
|
||||
```bash
|
||||
cat > /opt/gitea-runner/monitor.sh <<'EOF'
|
||||
@@ -1305,9 +1454,13 @@ curl -H "Authorization: token YOUR_GITEA_TOKEN" \
|
||||
```yaml
|
||||
# .gitea/workflows/test-runner.yaml
|
||||
name: Test Runner
|
||||
# on:
|
||||
# push:
|
||||
# branches: [main]
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
tags:
|
||||
- v*
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -1427,15 +1580,14 @@ chmod +x /opt/gitea-runner/backup.sh
|
||||
echo "0 2 * * * /opt/gitea-runner/backup.sh" | crontab -
|
||||
```
|
||||
|
||||
Теперь у вас есть полностью настроенная инфраструктура с Gitea в K3s кластере и Gitea Runner в LXC контейнере на Proxmox ARM64!
|
||||
|
||||
## Работа с вашим кластером
|
||||
## Работа с кластером
|
||||
|
||||
### Основные команды для работы с кластером
|
||||
|
||||
```bash
|
||||
# Установка переменной окружения для работы с кластером
|
||||
export KUBECONFIG=~/.kube/config_hlab
|
||||
export KUBECONFIG=~/.kube/{configfile}
|
||||
|
||||
# Проверка состояния кластера
|
||||
kubectl get nodes -o wide
|
||||
@@ -1452,7 +1604,11 @@ kubectl get storageclass
|
||||
|
||||
# Проверка ingress и сервисов
|
||||
kubectl get svc -n default | grep traefik
|
||||
kubectl get ingress -A
|
||||
kubectl get crds
|
||||
kubectl get ingressroutes.traefik.io -A
|
||||
|
||||
# Проверка сертификатов
|
||||
kubectl get certificates -A -o wide
|
||||
```
|
||||
|
||||
### Мониторинг и обслуживание
|
||||
@@ -1489,9 +1645,3 @@ kubectl logs -n gitea statefulset/gitea-valkey-cluster -c valkey
|
||||
kubectl exec -n gitea deployment/gitea -- ping gitea-postgres
|
||||
kubectl exec -n gitea deployment/gitea -- ping gitea-valkey-cluster
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Автор:** [Ваше имя]
|
||||
**Дата:** [Дата публикации]
|
||||
**Версия:** 1.0.0
|
Reference in New Issue
Block a user