- 移除 platforms: linux/amd64,linux/arm64 配置 - 恢复为单架构构建(默认 linux/amd64) - 原因:ARM64 构建时 apk ���发脚本在 QEMU 模拟环境下执行失败
101 lines
3.4 KiB
YAML
101 lines
3.4 KiB
YAML
name: Deploy
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
env:
|
|
IMAGE_PREFIX: tegical/seclusion
|
|
|
|
jobs:
|
|
build-and-push:
|
|
name: Build and Push Images
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
image_tag: ${{ steps.meta.outputs.tag }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Generate image tag
|
|
id: meta
|
|
run: |
|
|
echo "tag=$(date +%Y%m%d%H%M%S)-${GITHUB_SHA::8}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Login to Harbor Registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ vars.IMAGE_REGISTRY }}
|
|
username: ${{ secrets.IMAGE_REGISTRY_ROBOT_USERNAME }}
|
|
password: ${{ secrets.IMAGE_REGISTRY_ROBOT_PASSWORD }}
|
|
|
|
- name: Build and push Web image
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: ./apps/web/Dockerfile
|
|
push: true
|
|
tags: |
|
|
${{ vars.IMAGE_REGISTRY }}/${{ env.IMAGE_PREFIX }}-web:${{ steps.meta.outputs.tag }}
|
|
${{ vars.IMAGE_REGISTRY }}/${{ env.IMAGE_PREFIX }}-web:latest
|
|
cache-from: type=registry,ref=${{ vars.IMAGE_REGISTRY }}/${{ env.IMAGE_PREFIX }}-web:buildcache
|
|
cache-to: type=registry,ref=${{ vars.IMAGE_REGISTRY }}/${{ env.IMAGE_PREFIX }}-web:buildcache,mode=max
|
|
|
|
- name: Build and push API image
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: ./apps/api/Dockerfile
|
|
push: true
|
|
tags: |
|
|
${{ vars.IMAGE_REGISTRY }}/${{ env.IMAGE_PREFIX }}-api:${{ steps.meta.outputs.tag }}
|
|
${{ vars.IMAGE_REGISTRY }}/${{ env.IMAGE_PREFIX }}-api:latest
|
|
cache-from: type=registry,ref=${{ vars.IMAGE_REGISTRY }}/${{ env.IMAGE_PREFIX }}-api:buildcache
|
|
cache-to: type=registry,ref=${{ vars.IMAGE_REGISTRY }}/${{ env.IMAGE_PREFIX }}-api:buildcache,mode=max
|
|
|
|
deploy:
|
|
name: Deploy to Knative
|
|
runs-on: ubuntu-latest
|
|
needs: build-and-push
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup kubectl
|
|
uses: azure/setup-kubectl@v4
|
|
|
|
- name: Configure kubeconfig
|
|
run: |
|
|
mkdir -p ~/.kube
|
|
echo "${{ secrets.KUBECONFIG }}" | base64 -d > ~/.kube/config
|
|
chmod 600 ~/.kube/config
|
|
|
|
- name: Update image tags in manifests
|
|
run: |
|
|
IMAGE_TAG=${{ needs.build-and-push.outputs.image_tag }}
|
|
IMAGE_REGISTRY=${{ vars.IMAGE_REGISTRY }}
|
|
sed -i "s|IMAGE_TAG_PLACEHOLDER|${IMAGE_TAG}|g" deploy/k8s/*.yaml
|
|
sed -i "s|IMAGE_REGISTRY_PLACEHOLDER|${IMAGE_REGISTRY}|g" deploy/k8s/*.yaml
|
|
|
|
- name: Deploy to Knative
|
|
run: |
|
|
kubectl apply -f deploy/k8s/namespace.yaml
|
|
kubectl apply -f deploy/k8s/configmap.yaml
|
|
kubectl apply -f deploy/k8s/secret.yaml
|
|
kubectl apply -f deploy/k8s/web-ksvc.yaml
|
|
kubectl apply -f deploy/k8s/api-ksvc.yaml
|
|
|
|
- name: Wait for services to be ready
|
|
run: |
|
|
kubectl wait --for=condition=Ready ksvc/seclusion-web -n seclusion --timeout=300s
|
|
kubectl wait --for=condition=Ready ksvc/seclusion-api -n seclusion --timeout=300s
|
|
|
|
- name: Get service URLs
|
|
run: |
|
|
echo "Web URL: $(kubectl get ksvc seclusion-web -n seclusion -o jsonpath='{.status.url}')"
|
|
echo "API URL: $(kubectl get ksvc seclusion-api -n seclusion -o jsonpath='{.status.url}')"
|