Merge pull request 'ci: fix workflow syntax and use SSH keys' (#1) from main into dev
Dev Deploy to Staging / build-and-deploy (push) Failing after 6s
Dev Deploy to Staging / build-and-deploy (push) Failing after 6s
Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
@@ -0,0 +1,184 @@
|
|||||||
|
name: Dev Deploy to Staging
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- dev
|
||||||
|
workflow_dispatch:
|
||||||
|
workflow_call:
|
||||||
|
|
||||||
|
env:
|
||||||
|
REGISTRY: 192.168.1.8:8084
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Determine service metadata
|
||||||
|
id: meta
|
||||||
|
run: |
|
||||||
|
REPO_NAME=$(basename ${{ github.repository }})
|
||||||
|
case "$REPO_NAME" in
|
||||||
|
narng-api-laravel) SERVICE="laravel"; TAG_VAR="LARAVEL_TAG" ;;
|
||||||
|
narng-api | narng-api-gateway) SERVICE="api"; TAG_VAR="API_TAG" ;;
|
||||||
|
narng-web-app) SERVICE="web"; TAG_VAR="WEB_TAG" ;;
|
||||||
|
*) SERVICE=$(echo "$REPO_NAME" | sed 's/^narng-//'); TAG_VAR=$(echo "$SERVICE" | tr '[:lower:]' '[:upper:]')_TAG ;;
|
||||||
|
esac
|
||||||
|
echo "SERVICE=$SERVICE" >> $GITHUB_OUTPUT
|
||||||
|
echo "TAG_VAR=$TAG_VAR" >> $GITHUB_OUTPUT
|
||||||
|
echo "IMAGE=${{ env.REGISTRY }}/$REPO_NAME" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Generate version
|
||||||
|
id: version
|
||||||
|
run: echo "VERSION=1.0.0-dev.${{ github.run_number }}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Build Docker image
|
||||||
|
env:
|
||||||
|
DOCKER_BUILDKIT: 1
|
||||||
|
run: |
|
||||||
|
IMAGE=${{ steps.meta.outputs.IMAGE }}
|
||||||
|
VERSION=${{ steps.version.outputs.VERSION }}
|
||||||
|
docker buildx build --builder default --tag "$IMAGE:$VERSION" --tag "$IMAGE:1.0.0-latest" --load . 2>&1 | tail -20
|
||||||
|
|
||||||
|
- name: Login to Nexus
|
||||||
|
env:
|
||||||
|
NEXUS_USER: ${{ secrets.NEXUS_USER }}
|
||||||
|
NEXUS_PASS: ${{ secrets.NEXUS_PASS }}
|
||||||
|
run: echo "$NEXUS_PASS" | docker login ${{ env.REGISTRY }} -u "$NEXUS_USER" --password-stdin
|
||||||
|
|
||||||
|
- name: Push to Nexus
|
||||||
|
run: |
|
||||||
|
IMAGE=${{ steps.meta.outputs.IMAGE }}
|
||||||
|
VERSION=${{ steps.version.outputs.VERSION }}
|
||||||
|
docker push "$IMAGE:$VERSION"
|
||||||
|
docker push "$IMAGE:1.0.0-latest"
|
||||||
|
|
||||||
|
- name: Deploy to staging via SSH
|
||||||
|
uses: appleboy/ssh-action@v1.0.3
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.STAGING_HOST }}
|
||||||
|
username: ${{ secrets.STAGING_USER }}
|
||||||
|
key: ${{ secrets.STAGING_SSH_KEY }}
|
||||||
|
script: |
|
||||||
|
SERVICE=${{ steps.meta.outputs.SERVICE }}
|
||||||
|
VERSION=${{ steps.version.outputs.VERSION }}
|
||||||
|
TAG_VAR=${{ steps.meta.outputs.TAG_VAR }}
|
||||||
|
echo "Deploying $SERVICE:$VERSION"
|
||||||
|
|
||||||
|
sed -i "s|^${TAG_VAR}=.*|${TAG_VAR}=${VERSION}|" /srv/staging/narng-platform/compose/.env
|
||||||
|
|
||||||
|
cd /srv/staging/narng-platform/compose
|
||||||
|
docker compose pull $SERVICE
|
||||||
|
docker compose up -d --force-recreate --no-deps $SERVICE
|
||||||
|
docker image prune -f
|
||||||
|
|
||||||
|
# name: Dev Deploy to Staging
|
||||||
|
# on:
|
||||||
|
# push:
|
||||||
|
# branches:
|
||||||
|
# - dev
|
||||||
|
# workflow_dispatch:
|
||||||
|
# workflow_call: # برای استفاده در ریپوهای دیگر
|
||||||
|
|
||||||
|
# env:
|
||||||
|
# REGISTRY: 192.168.1.8:8084
|
||||||
|
|
||||||
|
# jobs:
|
||||||
|
# build-and-deploy:
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# steps:
|
||||||
|
# - name: Checkout code
|
||||||
|
# uses: actions/checkout@v4
|
||||||
|
# with:
|
||||||
|
# fetch-depth: 0
|
||||||
|
|
||||||
|
# - name: Determine service metadata
|
||||||
|
# id: meta
|
||||||
|
# run: |
|
||||||
|
# REPO_NAME=$(basename ${{ github.repository }})
|
||||||
|
# case "$REPO_NAME" in
|
||||||
|
# narng-api-laravel)
|
||||||
|
# SERVICE="laravel"
|
||||||
|
# TAG_VAR="LARAVEL_TAG"
|
||||||
|
# ;;
|
||||||
|
# narng-api | narng-api-gateway)
|
||||||
|
# SERVICE="api"
|
||||||
|
# TAG_VAR="API_TAG"
|
||||||
|
# ;;
|
||||||
|
# narng-web-app)
|
||||||
|
# SERVICE="web"
|
||||||
|
# TAG_VAR="WEB_TAG"
|
||||||
|
# ;;
|
||||||
|
# *)
|
||||||
|
# SERVICE=$(echo "$REPO_NAME" | sed 's/^narng-//')
|
||||||
|
# TAG_VAR=$(echo "$SERVICE" | tr '[:lower:]' '[:upper:]')_TAG
|
||||||
|
# ;;
|
||||||
|
# esac
|
||||||
|
# echo "SERVICE=$SERVICE" >> $GITHUB_OUTPUT
|
||||||
|
# echo "TAG_VAR=$TAG_VAR" >> $GITHUB_OUTPUT
|
||||||
|
# echo "REPO_NAME=$REPO_NAME" >> $GITHUB_OUTPUT
|
||||||
|
# echo "IMAGE=${{ env.REGISTRY }}/$REPO_NAME" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# - name: Generate version
|
||||||
|
# id: version
|
||||||
|
# run: |
|
||||||
|
# VERSION="1.0.0-dev.${{ github.run_number }}"
|
||||||
|
# echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# - name: Build Docker image
|
||||||
|
# env:
|
||||||
|
# DOCKER_BUILDKIT: 1
|
||||||
|
# run: |
|
||||||
|
# IMAGE=${{ steps.meta.outputs.IMAGE }}
|
||||||
|
# VERSION=${{ steps.version.outputs.VERSION }}
|
||||||
|
# export DOCKER_BUILDKIT=1
|
||||||
|
# docker buildx build \
|
||||||
|
# --builder default \
|
||||||
|
# --tag "$IMAGE:$VERSION" \
|
||||||
|
# --tag "$IMAGE:1.0.0-latest" \
|
||||||
|
# --load \
|
||||||
|
# . 2>&1 | tail -20
|
||||||
|
|
||||||
|
# - name: Login to Nexus
|
||||||
|
# env:
|
||||||
|
# NEXUS_USER: ${{ secrets.NEXUS_USER }}
|
||||||
|
# NEXUS_PASS: ${{ secrets.NEXUS_PASS }}
|
||||||
|
# run: |
|
||||||
|
# echo "$NEXUS_PASS" | docker login ${{ env.REGISTRY }} -u "$NEXUS_USER" --password-stdin
|
||||||
|
|
||||||
|
# - name: Push to Nexus
|
||||||
|
# run: |
|
||||||
|
# IMAGE=${{ steps.meta.outputs.IMAGE }}
|
||||||
|
# VERSION=${{ steps.version.outputs.VERSION }}
|
||||||
|
# docker push "$IMAGE:$VERSION"
|
||||||
|
# docker push "$IMAGE:1.0.0-latest"
|
||||||
|
|
||||||
|
# - name: Deploy to staging (Host-level)
|
||||||
|
# run: |
|
||||||
|
# SERVICE=${{ steps.meta.outputs.SERVICE }}
|
||||||
|
# VERSION=${{ steps.version.outputs.VERSION }}
|
||||||
|
# TAG_VAR=${{ steps.meta.outputs.TAG_VAR }}
|
||||||
|
# echo "Deploying $SERVICE:$VERSION"
|
||||||
|
|
||||||
|
# # آپدیت فایل .env در مسیر صحیح سرور
|
||||||
|
# docker run --rm -v /srv/staging/narng-platform:/srv/staging/narng-platform alpine sh -c "sed -i 's|^${TAG_VAR}=.*|${TAG_VAR}=${VERSION}|' /srv/staging/narng-platform/compose/.env"
|
||||||
|
|
||||||
|
# # ریاستارت کانتینر با استفاده از فایل .env صحیح
|
||||||
|
# docker run --rm \
|
||||||
|
# -v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
# -v /srv/staging/narng-platform:/srv/staging/narng-platform:ro \
|
||||||
|
# -w /srv/staging/narng-platform/compose \
|
||||||
|
# docker:24-cli \
|
||||||
|
# sh -c "docker compose --env-file .env up -d --no-deps $SERVICE"
|
||||||
|
|
||||||
|
# - name: Verify
|
||||||
|
# run: |
|
||||||
|
# SERVICE=${{ steps.meta.outputs.SERVICE }}
|
||||||
|
# CONTAINER="staging-narng-${SERVICE}"
|
||||||
|
# sleep 10
|
||||||
|
# STATUS=$(docker inspect --format='{{.State.Status}}' "$CONTAINER" 2>/dev/null || echo "not found")
|
||||||
|
# echo "Container: $CONTAINER - Status: $STATUS"
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
name: Dev Deploy to Staging
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- dev
|
|
||||||
workflow_dispatch:
|
|
||||||
workflow_call: # برای استفاده در ریپوهای دیگر
|
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY: 192.168.1.8:8084
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Determine service metadata
|
|
||||||
id: meta
|
|
||||||
run: |
|
|
||||||
REPO_NAME=$(basename ${{ github.repository }})
|
|
||||||
case "$REPO_NAME" in
|
|
||||||
narng-api-laravel)
|
|
||||||
SERVICE="laravel"
|
|
||||||
TAG_VAR="LARAVEL_TAG"
|
|
||||||
;;
|
|
||||||
narng-api | narng-api-gateway)
|
|
||||||
SERVICE="api"
|
|
||||||
TAG_VAR="API_TAG"
|
|
||||||
;;
|
|
||||||
narng-web-app)
|
|
||||||
SERVICE="web"
|
|
||||||
TAG_VAR="WEB_TAG"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
SERVICE=$(echo "$REPO_NAME" | sed 's/^narng-//')
|
|
||||||
TAG_VAR=$(echo "$SERVICE" | tr '[:lower:]' '[:upper:]')_TAG
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
echo "SERVICE=$SERVICE" >> $GITHUB_OUTPUT
|
|
||||||
echo "TAG_VAR=$TAG_VAR" >> $GITHUB_OUTPUT
|
|
||||||
echo "REPO_NAME=$REPO_NAME" >> $GITHUB_OUTPUT
|
|
||||||
echo "IMAGE=${{ env.REGISTRY }}/$REPO_NAME" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Generate version
|
|
||||||
id: version
|
|
||||||
run: |
|
|
||||||
VERSION="1.0.0-dev.${{ github.run_number }}"
|
|
||||||
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Build Docker image
|
|
||||||
env:
|
|
||||||
DOCKER_BUILDKIT: 1
|
|
||||||
run: |
|
|
||||||
IMAGE=${{ steps.meta.outputs.IMAGE }}
|
|
||||||
VERSION=${{ steps.version.outputs.VERSION }}
|
|
||||||
export DOCKER_BUILDKIT=1
|
|
||||||
docker buildx build \
|
|
||||||
--builder default \
|
|
||||||
--tag "$IMAGE:$VERSION" \
|
|
||||||
--tag "$IMAGE:1.0.0-latest" \
|
|
||||||
--load \
|
|
||||||
. 2>&1 | tail -20
|
|
||||||
|
|
||||||
- name: Login to Nexus
|
|
||||||
env:
|
|
||||||
NEXUS_USER: ${{ secrets.NEXUS_USER }}
|
|
||||||
NEXUS_PASS: ${{ secrets.NEXUS_PASS }}
|
|
||||||
run: |
|
|
||||||
echo "$NEXUS_PASS" | docker login ${{ env.REGISTRY }} -u "$NEXUS_USER" --password-stdin
|
|
||||||
|
|
||||||
- name: Push to Nexus
|
|
||||||
run: |
|
|
||||||
IMAGE=${{ steps.meta.outputs.IMAGE }}
|
|
||||||
VERSION=${{ steps.version.outputs.VERSION }}
|
|
||||||
docker push "$IMAGE:$VERSION"
|
|
||||||
docker push "$IMAGE:1.0.0-latest"
|
|
||||||
|
|
||||||
- name: Deploy to staging (Host-level)
|
|
||||||
run: |
|
|
||||||
SERVICE=${{ steps.meta.outputs.SERVICE }}
|
|
||||||
VERSION=${{ steps.version.outputs.VERSION }}
|
|
||||||
TAG_VAR=${{ steps.meta.outputs.TAG_VAR }}
|
|
||||||
echo "Deploying $SERVICE:$VERSION"
|
|
||||||
|
|
||||||
# آپدیت فایل .env در مسیر صحیح سرور
|
|
||||||
docker run --rm -v /srv/staging/narng-platform:/srv/staging/narng-platform alpine sh -c "sed -i 's|^${TAG_VAR}=.*|${TAG_VAR}=${VERSION}|' /srv/staging/narng-platform/compose/.env"
|
|
||||||
|
|
||||||
# ریاستارت کانتینر با استفاده از فایل .env صحیح
|
|
||||||
docker run --rm \
|
|
||||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
||||||
-v /srv/staging/narng-platform:/srv/staging/narng-platform:ro \
|
|
||||||
-w /srv/staging/narng-platform/compose \
|
|
||||||
docker:24-cli \
|
|
||||||
sh -c "docker compose --env-file .env up -d --no-deps $SERVICE"
|
|
||||||
|
|
||||||
- name: Verify
|
|
||||||
run: |
|
|
||||||
SERVICE=${{ steps.meta.outputs.SERVICE }}
|
|
||||||
CONTAINER="staging-narng-${SERVICE}"
|
|
||||||
sleep 10
|
|
||||||
STATUS=$(docker inspect --format='{{.State.Status}}' "$CONTAINER" 2>/dev/null || echo "not found")
|
|
||||||
echo "Container: $CONTAINER - Status: $STATUS"
|
|
||||||
Reference in New Issue
Block a user