修复一些已知问题
This commit is contained in:
2
.github/workflows/app-expo-deploy.yml
vendored
2
.github/workflows/app-expo-deploy.yml
vendored
@@ -44,8 +44,6 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
# GitHub Environments: 在 Repo Settings → Environments 中创建 dev/staging/production,可配置独立 secrets
|
||||
environment: ${{ (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'prod') && 'production' || (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'stage') && 'staging' || startsWith(github.ref, 'refs/tags/v') && 'production' || 'dev' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
|
||||
75
.github/workflows/docker-build-deploy.yml
vendored
75
.github/workflows/docker-build-deploy.yml
vendored
@@ -1,5 +1,11 @@
|
||||
# API Docker:main → Dev(GitHub Environment: dev),Tag v*.*.* → Production(environment: production)
|
||||
# 在 Repo Settings → Environments 中为 dev / production 分别配置 SSH、DEPLOY_PATH、迁移 DB 等 Secrets。
|
||||
# API Docker:main → Dev 机(Repository secrets: DEV_*),Tag v*.*.* → Prod 机(PROD_*)
|
||||
# 在 Repo → Settings → Secrets and variables → Actions 中配置,无需 GitHub Environments。
|
||||
# 命名:DEV_SSH_HOST / DEV_SSH_USER / DEV_SSH_PRIVATE_KEY / DEV_SSH_PORT / DEV_DEPLOY_PATH / DEV_MIGRATION_DB_*
|
||||
# PROD_SSH_HOST / PROD_SSH_USER / PROD_SSH_PRIVATE_KEY / PROD_SSH_PORT / PROD_DEPLOY_PATH / PROD_MIGRATION_DB_*
|
||||
# 阿里云镜像仍为仓库级:ALIYUN_CR_USERNAME / ALIYUN_CR_PASSWORD
|
||||
#
|
||||
# 从旧版迁移:若仓库里仍是 SSH_HOST、SSH_PRIVATE_KEY、DEPLOY_PATH 等无前缀名称,
|
||||
# 请把「原机 / 内部测试」对应值复制为 DEV_*,「新生产机」填 PROD_*,并删除旧的无前缀 Secret。
|
||||
#
|
||||
# 发布策略:
|
||||
# - merge / push 到 main:构建并部署到 Dev / 内部测试
|
||||
@@ -97,9 +103,6 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build-and-push
|
||||
if: github.event_name != 'pull_request'
|
||||
# workflow_dispatch 下若填写了 branch 输入,以输入为准选择 environment(避免仅 UI 选了 tag 但部署 main 时误用 production)
|
||||
environment:
|
||||
name: ${{ ((github.event_name == 'workflow_dispatch' && github.event.inputs.branch != '' && startsWith(github.event.inputs.branch, 'v')) || (github.event_name == 'workflow_dispatch' && github.event.inputs.branch == '' && startsWith(github.ref, 'refs/tags/v')) || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v'))) && 'production' || 'dev' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
@@ -107,15 +110,53 @@ jobs:
|
||||
with:
|
||||
ref: ${{ github.event.inputs.branch || github.ref }}
|
||||
|
||||
- name: Determine deploy target
|
||||
id: deploy_target
|
||||
run: |
|
||||
if [ -n "${{ github.event.inputs.branch }}" ]; then
|
||||
REF_NAME="${{ github.event.inputs.branch }}"
|
||||
else
|
||||
REF_NAME="${{ github.ref_name }}"
|
||||
fi
|
||||
if [[ "$REF_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "target=prod" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "target=dev" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Set up SSH
|
||||
uses: webfactory/ssh-agent@v0.9.0
|
||||
with:
|
||||
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||
ssh-private-key: ${{ steps.deploy_target.outputs.target == 'prod' && secrets.PROD_SSH_PRIVATE_KEY || secrets.DEV_SSH_PRIVATE_KEY }}
|
||||
|
||||
- name: Export deploy connection env
|
||||
run: |
|
||||
if [ "${{ steps.deploy_target.outputs.target }}" = "prod" ]; then
|
||||
{
|
||||
echo "SSH_HOST=${{ secrets.PROD_SSH_HOST }}"
|
||||
echo "SSH_USER=${{ secrets.PROD_SSH_USER }}"
|
||||
echo "SSH_PORT=${{ secrets.PROD_SSH_PORT || '22' }}"
|
||||
echo "COMPOSE_DIR=${{ secrets.PROD_DEPLOY_PATH || '/opt/life-echo' }}"
|
||||
echo "DB_USER=${{ secrets.PROD_MIGRATION_DB_USER || '' }}"
|
||||
echo "DB_PASSWORD=${{ secrets.PROD_MIGRATION_DB_PASSWORD || '' }}"
|
||||
echo "DB_NAME=${{ secrets.PROD_MIGRATION_DB_NAME || '' }}"
|
||||
} >> "$GITHUB_ENV"
|
||||
else
|
||||
{
|
||||
echo "SSH_HOST=${{ secrets.DEV_SSH_HOST }}"
|
||||
echo "SSH_USER=${{ secrets.DEV_SSH_USER }}"
|
||||
echo "SSH_PORT=${{ secrets.DEV_SSH_PORT || '22' }}"
|
||||
echo "COMPOSE_DIR=${{ secrets.DEV_DEPLOY_PATH || '/opt/life-echo' }}"
|
||||
echo "DB_USER=${{ secrets.DEV_MIGRATION_DB_USER || '' }}"
|
||||
echo "DB_PASSWORD=${{ secrets.DEV_MIGRATION_DB_PASSWORD || '' }}"
|
||||
echo "DB_NAME=${{ secrets.DEV_MIGRATION_DB_NAME || '' }}"
|
||||
} >> "$GITHUB_ENV"
|
||||
fi
|
||||
|
||||
- name: Add server to known hosts
|
||||
run: |
|
||||
mkdir -p ~/.ssh
|
||||
ssh-keyscan -H -p "${{ secrets.SSH_PORT || 22 }}" "${{ secrets.SSH_HOST }}" >> ~/.ssh/known_hosts
|
||||
ssh-keyscan -H -p "${SSH_PORT:-22}" "${SSH_HOST}" >> ~/.ssh/known_hosts
|
||||
|
||||
- name: Determine image tag
|
||||
id: image_tag
|
||||
@@ -138,11 +179,7 @@ jobs:
|
||||
|
||||
- name: Prepare remote candidate release
|
||||
env:
|
||||
SSH_USER: ${{ secrets.SSH_USER }}
|
||||
SSH_HOST: ${{ secrets.SSH_HOST }}
|
||||
SSH_PORT: ${{ secrets.SSH_PORT || 22 }}
|
||||
IMAGE_TAG: ${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/${{ env.IMAGE_NAME }}:${{ steps.image_tag.outputs.tag }}
|
||||
COMPOSE_DIR: ${{ secrets.DEPLOY_PATH || '/opt/life-echo' }}
|
||||
REGISTRY: ${{ env.REGISTRY }}
|
||||
ALIYUN_CR_USERNAME: ${{ secrets.ALIYUN_CR_USERNAME }}
|
||||
ALIYUN_CR_PASSWORD: ${{ secrets.ALIYUN_CR_PASSWORD }}
|
||||
@@ -184,15 +221,8 @@ jobs:
|
||||
|
||||
- name: Backup and run database migrations safely
|
||||
env:
|
||||
SSH_USER: ${{ secrets.SSH_USER }}
|
||||
SSH_HOST: ${{ secrets.SSH_HOST }}
|
||||
SSH_PORT: ${{ secrets.SSH_PORT || 22 }}
|
||||
IMAGE_TAG: ${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/${{ env.IMAGE_NAME }}:${{ steps.image_tag.outputs.tag }}
|
||||
COMPOSE_DIR: ${{ secrets.DEPLOY_PATH || '/opt/life-echo' }}
|
||||
COMPOSE_FILE: docker-compose.yml
|
||||
DB_USER: ${{ secrets.MIGRATION_DB_USER || '' }}
|
||||
DB_PASSWORD: ${{ secrets.MIGRATION_DB_PASSWORD || '' }}
|
||||
DB_NAME: ${{ secrets.MIGRATION_DB_NAME || '' }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" \
|
||||
@@ -377,10 +407,6 @@ jobs:
|
||||
|
||||
- name: Promote candidate release
|
||||
env:
|
||||
SSH_USER: ${{ secrets.SSH_USER }}
|
||||
SSH_HOST: ${{ secrets.SSH_HOST }}
|
||||
SSH_PORT: ${{ secrets.SSH_PORT || 22 }}
|
||||
COMPOSE_DIR: ${{ secrets.DEPLOY_PATH || '/opt/life-echo' }}
|
||||
COMPOSE_FILE: docker-compose.yml
|
||||
run: |
|
||||
set -euo pipefail
|
||||
@@ -406,11 +432,6 @@ jobs:
|
||||
"
|
||||
|
||||
- name: Verify deployment
|
||||
env:
|
||||
SSH_USER: ${{ secrets.SSH_USER }}
|
||||
SSH_HOST: ${{ secrets.SSH_HOST }}
|
||||
SSH_PORT: ${{ secrets.SSH_PORT || 22 }}
|
||||
COMPOSE_DIR: ${{ secrets.DEPLOY_PATH || '/opt/life-echo' }}
|
||||
run: |
|
||||
echo "验证部署状态..."
|
||||
ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" \
|
||||
|
||||
Reference in New Issue
Block a user