92 lines
3.1 KiB
YAML
92 lines
3.1 KiB
YAML
name: Build and Deploy
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
|
|
env:
|
|
REGISTRY: registry.rose-ash.com:5000
|
|
IMAGE_CPU: celery-l1-server
|
|
IMAGE_GPU: celery-l1-gpu-server
|
|
|
|
jobs:
|
|
build-and-deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up SSH
|
|
env:
|
|
SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
|
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
|
run: |
|
|
mkdir -p ~/.ssh
|
|
echo "$SSH_KEY" > ~/.ssh/id_rsa
|
|
chmod 600 ~/.ssh/id_rsa
|
|
ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts 2>/dev/null || true
|
|
|
|
- name: Sync code to server
|
|
env:
|
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
|
run: |
|
|
rsync -avz --delete \
|
|
--exclude '.git' \
|
|
--exclude '__pycache__' \
|
|
--exclude '*.pyc' \
|
|
--exclude '.pytest_cache' \
|
|
--exclude 'venv' \
|
|
./ "root@$DEPLOY_HOST:/root/art-dag/celery/"
|
|
|
|
- name: Build and push CPU image
|
|
env:
|
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
|
run: |
|
|
ssh "root@$DEPLOY_HOST" "
|
|
cd /root/art-dag/celery
|
|
docker build --build-arg CACHEBUST=\$(date +%s) -t ${{ env.REGISTRY }}/${{ env.IMAGE_CPU }}:latest -t ${{ env.REGISTRY }}/${{ env.IMAGE_CPU }}:${{ github.sha }} .
|
|
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_CPU }}:latest
|
|
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_CPU }}:${{ github.sha }}
|
|
"
|
|
|
|
- name: Build and push GPU image
|
|
env:
|
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
|
run: |
|
|
ssh "root@$DEPLOY_HOST" "
|
|
cd /root/art-dag/celery
|
|
docker build --build-arg CACHEBUST=\$(date +%s) -f Dockerfile.gpu -t ${{ env.REGISTRY }}/${{ env.IMAGE_GPU }}:latest -t ${{ env.REGISTRY }}/${{ env.IMAGE_GPU }}:${{ github.sha }} .
|
|
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_GPU }}:latest
|
|
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_GPU }}:${{ github.sha }}
|
|
"
|
|
|
|
- name: Deploy stack
|
|
env:
|
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
|
run: |
|
|
ssh "root@$DEPLOY_HOST" "
|
|
cd /root/art-dag/celery
|
|
docker stack deploy -c docker-compose.yml celery
|
|
echo 'Waiting for services to update...'
|
|
sleep 10
|
|
docker stack services celery
|
|
"
|
|
|
|
- name: Deploy GPU worker
|
|
env:
|
|
GPU_HOST: ${{ secrets.GPU_HOST }}
|
|
SSH_KEY: ${{ secrets.GPU_SSH_KEY }}
|
|
if: ${{ env.GPU_HOST != '' }}
|
|
run: |
|
|
# Set up GPU SSH if different host
|
|
if [ -n "$SSH_KEY" ]; then
|
|
echo "$SSH_KEY" > ~/.ssh/gpu_key
|
|
chmod 600 ~/.ssh/gpu_key
|
|
ssh-keyscan -H "${GPU_HOST#*@}" >> ~/.ssh/known_hosts 2>/dev/null || true
|
|
|
|
ssh -i ~/.ssh/gpu_key "$GPU_HOST" "
|
|
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_GPU }}:latest
|
|
docker stack deploy -c /root/art-dag/celery/docker-compose.yml celery || \
|
|
docker service update --image ${{ env.REGISTRY }}/${{ env.IMAGE_GPU }}:latest celery_l1-gpu-worker
|
|
"
|
|
fi
|