Center Cicd
This commit is contained in:
@@ -0,0 +1,88 @@
|
|||||||
|
name: Deploy to Staging
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ dev ]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: staging-${{ github.repository }}
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout Code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
driver-opts: network=host
|
||||||
|
|
||||||
|
- name: Generate Version
|
||||||
|
id: version
|
||||||
|
run: echo "VERSION=1.0.0-dev.${{ github.run_number }}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Build Docker Image
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: ${{ vars.SERVICE_NAME || github.event.repository.name }}
|
||||||
|
VERSION: ${{ steps.version.outputs.VERSION }}
|
||||||
|
run: |
|
||||||
|
docker build \
|
||||||
|
--tag ${{ secrets.NEXUS_REGISTRY }}/$IMAGE_NAME:$VERSION \
|
||||||
|
--tag ${{ secrets.NEXUS_REGISTRY }}/$IMAGE_NAME:1.0.0-latest \
|
||||||
|
--build-arg NEXUS_REGISTRY=${{ secrets.NEXUS_REGISTRY }} \
|
||||||
|
.
|
||||||
|
|
||||||
|
- name: Login to Nexus
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ${{ secrets.NEXUS_REGISTRY }}
|
||||||
|
username: ${{ secrets.NEXUS_USER }}
|
||||||
|
password: ${{ secrets.NEXUS_PASS }}
|
||||||
|
|
||||||
|
- name: Push to Nexus
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: ${{ vars.SERVICE_NAME || github.event.repository.name }}
|
||||||
|
VERSION: ${{ steps.version.outputs.VERSION }}
|
||||||
|
run: |
|
||||||
|
docker push ${{ secrets.NEXUS_REGISTRY }}/$IMAGE_NAME:$VERSION
|
||||||
|
docker push ${{ secrets.NEXUS_REGISTRY }}/$IMAGE_NAME:1.0.0-latest
|
||||||
|
|
||||||
|
- name: Deploy to Staging
|
||||||
|
env:
|
||||||
|
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
STAGING_HOST: ${{ secrets.STAGING_HOST }}
|
||||||
|
STAGING_USER: ${{ secrets.STAGING_USER }}
|
||||||
|
IMAGE_NAME: ${{ vars.SERVICE_NAME || github.event.repository.name }}
|
||||||
|
VERSION: ${{ steps.version.outputs.VERSION }}
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
|
||||||
|
chmod 600 ~/.ssh/id_rsa
|
||||||
|
ssh-keyscan -H $STAGING_HOST >> ~/.ssh/known_hosts
|
||||||
|
|
||||||
|
ssh $STAGING_USER@$STAGING_HOST "
|
||||||
|
cd /srv/staging/narng-platform/compose
|
||||||
|
docker compose pull $IMAGE_NAME
|
||||||
|
export ${IMAGE_NAME}_TAG=$VERSION
|
||||||
|
docker compose up -d $IMAGE_NAME
|
||||||
|
"
|
||||||
|
|
||||||
|
- name: Wait for Health Check
|
||||||
|
env:
|
||||||
|
IMAGE_NAME: ${{ vars.SERVICE_NAME || github.event.repository.name }}
|
||||||
|
run: sleep 15
|
||||||
|
|
||||||
|
- name: Run Smoke Test
|
||||||
|
env:
|
||||||
|
STAGING_HOST: ${{ secrets.STAGING_HOST }}
|
||||||
|
run: |
|
||||||
|
STATUS=$(curl -sk -o /dev/null -w "%{http_code}" https://api.$STAGING_HOST/api/categories || echo "000")
|
||||||
|
if [ "$STATUS" != "200" ]; then
|
||||||
|
echo "Smoke test failed with status $STATUS"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Smoke test passed!"
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
node_modules/
|
||||||
|
test-results/
|
||||||
|
playwright-report/
|
||||||
|
.env
|
||||||
|
*.log
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
Narng CI/CD
|
||||||
|
این ریپو حاوی کانفیگها و اسکریپتهای مرکزی CI/CD برای پروژه Narng است.
|
||||||
|
|
||||||
|
ساختار
|
||||||
|
.gitea/workflows/deploy-staging.yml: Pipeline اصلی برای Deploy به Staging (شاخه dev).
|
||||||
|
scripts/: اسکریپتهای کمکی برای Deploy.
|
||||||
|
نحوه استفاده
|
||||||
|
برای فعالسازی این Pipeline در یک سرویس (مثلاً narng-auth):
|
||||||
|
|
||||||
|
فایل .gitea/workflows/deploy-staging.yml را در ریپو سرویس ایجاد کنید.
|
||||||
|
در صورت نیاز، متغیر SERVICE_NAME را در تنظیمات ریپو سرویس تنظیم کنید.
|
||||||
|
در صورت نیاز، Secrets زیر را در ریپو سرویس تنظیم کنید:
|
||||||
|
NEXUS_REGISTRY: آدرس Registry (مثلاً 192.168.1.8:8084)
|
||||||
|
NEXUS_USER: کاربری Nexus
|
||||||
|
NEXUS_PASS: پسورد Nexus
|
||||||
|
SSH_PRIVATE_KEY: کلید خصوصی SSH برای دسترسی به سرور
|
||||||
|
STAGING_HOST: آدرس سرور Staging
|
||||||
|
STAGING_USER: کاربری سرور (مثلاً root)
|
||||||
Reference in New Issue
Block a user