name: GKE Auto-Deploy on: [push] env: PROJECT_ID: deployments-485614 REGION: europe-west1 REPO_NAME: gitea-repo CLUSTER_NAME: gitea-cluster CLUSTER_ZONE: europe-west1-b # --- CONFIGURAZIONE PROGETTO --- APP_NAME: varco # Nome dell'applicazione # ------------------------------- jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Google Auth uses: google-github-actions/auth@v1 with: credentials_json: ${{ secrets.GCP_SA_KEY }} - name: Set up Cloud SDK uses: google-github-actions/setup-gcloud@v1 with: # Installiamo anche 'gettext-base' che contiene il comando envsubst (se manca) install_components: 'gke-gcloud-auth-plugin,kubectl' - name: Docker Auth run: gcloud auth configure-docker ${{ env.REGION }}-docker.pkg.dev - name: Build and Push run: | # Costruiamo il nome completo dell'immagine # Lo esportiamo in GITHUB_ENV così diventa disponibile agli step successivi echo "FULL_IMAGE_NAME=${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPO_NAME }}/${{ env.APP_NAME }}:${{ gitea.sha }}" >> $GITHUB_ENV # Nota: uso la variabile appena creata leggendola dall'ambiente corrente IMAGE_TAG=${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPO_NAME }}/${{ env.APP_NAME }}:${{ gitea.sha }} docker build -t $IMAGE_TAG . docker push $IMAGE_TAG # --- PARTE NUOVA: TEMPLATING E APPLY --- - name: Deploy to GKE run: | gcloud container clusters get-credentials ${{ env.CLUSTER_NAME }} --zone ${{ env.CLUSTER_ZONE }} # 1. Installiamo envsubst (se non c'è già nell'immagine, di solito c'è ma per sicurezza) sudo apt-get update && sudo apt-get install -y gettext-base # 2. Sostituzione variabili # Legge k8s/deployment.yaml, sostituisce ${APP_NAME} e ${FULL_IMAGE_NAME} # Scrive il risultato in un file temporaneo 'final-deploy.yaml' envsubst < ./k8s/deployment.yaml > final-deploy.yaml # (Opzionale) Stampiamo il file per debug echo "--- FILE YAML GENERATO ---" cat final-deploy.yaml echo "--------------------------" # 3. Applica a Kubernetes # Se il deployment non esiste, lo crea. Se esiste, lo aggiorna. kubectl apply -f final-deploy.yaml