Files
enerport-web-app/.gitea/workflows/build-and-push.yaml
Murat Özkorkmaz ce739ba70c
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 57s
Build and Push Docker Image / deploy (push) Successful in 4s
CI Test
2025-10-21 22:45:38 +02:00

144 lines
4.9 KiB
YAML

name: Build and Push Docker Image
on:
push:
branches:
- main
tags:
- 'v*'
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Determine Image Tag
id: tag
run: |
# Prüfe ob es ein Git Tag ist
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
# Verwende den Tag-Namen (z.B. v1.0.0)
TAG="${{ github.ref_name }}"
elif [[ "${{ github.ref_name }}" == "main" ]]; then
# Für main Branch: verwende 'latest'
TAG="latest"
else
# Für andere Branches: verwende Branch-Name + kurzen Commit-SHA
TAG="${{ github.ref_name }}-${{ github.sha }}"
TAG="${TAG:0:50}" # Limit auf 50 Zeichen
fi
echo "IMAGE_TAG=${TAG}" >> $GITHUB_OUTPUT
echo "📦 Image Tag: ${TAG}"
- name: Create .env file from secrets and variables
run: |
cd docker
cat > .env << EOF
REGISTRY_URL=${{ vars.REGISTRY_URL }}
NAMESPACE=${{ vars.NAMESPACE }}
REPO_NAME=${{ vars.REPO_NAME }}
IMAGE_TAG=${{ steps.tag.outputs.IMAGE_TAG }}
CI_GITEA_USER=${{ secrets.CI_GITEA_USER }}
CI_GITEA_TOKEN=${{ secrets.CI_GITEA_TOKEN }}
EOF
echo "✅ .env file created with IMAGE_TAG=${{ steps.tag.outputs.IMAGE_TAG }}"
- name: Build Docker Image
run: |
cd docker
chmod +x build.sh
./build.sh
- name: Push Docker Image to Registry
run: |
cd docker
chmod +x push.sh
./push.sh
- name: Summary
run: |
echo "🎉 Build and Push completed successfully!"
echo "📦 Image: ${{ vars.REGISTRY_URL }}/${{ vars.NAMESPACE }}/${{ vars.REPO_NAME }}:${{ steps.tag.outputs.IMAGE_TAG }}"
deploy:
runs-on: ubuntu-latest
needs: build-and-push
steps:
- name: Determine Image Tag
id: tag
run: |
# Prüfe ob es ein Git Tag ist
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
TAG="${{ github.ref_name }}"
elif [[ "${{ github.ref_name }}" == "main" ]]; then
TAG="latest"
else
TAG="${{ github.ref_name }}-${{ github.sha }}"
TAG="${TAG:0:50}"
fi
echo "IMAGE_TAG=${TAG}" >> $GITHUB_OUTPUT
echo "📦 Deploying Image Tag: ${TAG}"
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts
- name: Deploy to Server
env:
IMAGE_NAME: ${{ vars.REGISTRY_URL }}/${{ vars.NAMESPACE }}/${{ vars.REPO_NAME }}:${{ steps.tag.outputs.IMAGE_TAG }}
CONTAINER_NAME: ${{ vars.REPO_NAME }}
CONTAINER_PORT: ${{ vars.CONTAINER_PORT }}
run: |
echo "🚀 Starting deployment to ${{ secrets.DEPLOY_HOST }}..."
ssh -i ~/.ssh/deploy_key ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} << 'EOF'
set -e
echo "📦 Logging in to registry..."
echo "${{ secrets.CI_GITEA_TOKEN }}" | docker login ${{ vars.REGISTRY_URL }} -u "${{ secrets.CI_GITEA_USER }}" --password-stdin
echo "📥 Pulling new image: ${{ env.IMAGE_NAME }}"
docker pull ${{ env.IMAGE_NAME }}
echo "🛑 Stopping old container (if exists)..."
docker stop ${{ env.CONTAINER_NAME }} 2>/dev/null || true
docker rm ${{ env.CONTAINER_NAME }} 2>/dev/null || true
echo "🔗 Ensuring Docker network 'proxy' exists..."
docker network inspect proxy >/dev/null 2>&1 || docker network create proxy
echo "🚀 Starting new container on port ${{ env.CONTAINER_PORT }}..."
docker run -d \
--name ${{ env.CONTAINER_NAME }} \
--restart unless-stopped \
--network proxy \
-p ${{ env.CONTAINER_PORT }}:8080 \
${{ env.IMAGE_NAME }}
echo "✅ Deployment completed successfully!"
docker ps | grep ${{ env.CONTAINER_NAME }}
EOF
- name: Cleanup
if: always()
run: |
rm -f ~/.ssh/deploy_key
- name: Deployment Summary
run: |
echo "🎉 Deployment completed successfully!"
echo "🖥️ Server: ${{ secrets.DEPLOY_HOST }}"
echo "📦 Image: ${{ vars.REGISTRY_URL }}/${{ vars.NAMESPACE }}/${{ vars.REPO_NAME }}:${{ steps.tag.outputs.IMAGE_TAG }}"
echo "🐳 Container: ${{ vars.REPO_NAME }}"
echo "🌐 URL: http://${{ secrets.DEPLOY_HOST }}:${{ vars.CONTAINER_PORT }}"