|
| 1 | +name: "Deploy to GCE development" |
| 2 | + |
| 3 | +on: |
| 4 | + push: |
| 5 | + branches: [ "develop" ] |
| 6 | + |
| 7 | +env: |
| 8 | + GCP_PROJECT_ID: ${{ vars.GCP_PROJECT_ID }} |
| 9 | + GCP_ARTIFACT_REGISTRY_NAME: ${{ vars.GCP_ARTIFACT_REGISTRY_NAME }} |
| 10 | + GCP_ARTIFACT_REGISTRY_LOCATION: ${{ vars.GCP_ARTIFACT_REGISTRY_LOCATION }} |
| 11 | + GCP_IMAGE_NAME: ${{ vars.GCP_IMAGE_NAME }} |
| 12 | + GCP_VM_IP: ${{ vars.GCP_VM_IP }} |
| 13 | + GCP_VM_USER: ${{ vars.GCP_VM_USER }} |
| 14 | + |
| 15 | + CANON_API: ${{ vars.CANON_API }} |
| 16 | + CANON_CMS_CUBES: ${{ vars.CANON_CMS_CUBES }} |
| 17 | + CANON_CMS_ENABLE: ${{ vars.CANON_CMS_ENABLE }} |
| 18 | + CANON_CMS_FORCE_HTTPS: ${{ vars.CANON_CMS_FORCE_HTTPS }} |
| 19 | + CANON_CMS_GENERATOR_TIMEOUT: ${{ vars.CANON_CMS_GENERATOR_TIMEOUT }} |
| 20 | + CANON_CMS_LOGGING: ${{ vars.CANON_CMS_LOGGING }} |
| 21 | + CANON_CMS_MINIMUM_ROLE: ${{ vars.CANON_CMS_MINIMUM_ROLE }} |
| 22 | + CANON_CMS_REQUESTS_PER_SECOND: ${{ vars.CANON_CMS_REQUESTS_PER_SECOND }} |
| 23 | + CANON_CONST_CART: ${{ vars.CANON_CONST_CART }} |
| 24 | + CANON_CONST_CUBE: ${{ vars.CANON_CONST_CUBE }} |
| 25 | + CANON_CONST_TESSERACT: ${{ vars.CANON_CONST_TESSERACT }} |
| 26 | + CANON_DB_NAME: ${{ vars.CANON_DB_NAME }} |
| 27 | + CANON_DB_USER: ${{ vars.CANON_DB_USER }} |
| 28 | + CANON_GEOSERVICE_API: ${{ vars.CANON_GEOSERVICE_API }} |
| 29 | + CANON_GOOGLE_ANALYTICS: ${{ vars.CANON_GOOGLE_ANALYTICS }} |
| 30 | + CANON_LANGUAGES: ${{ vars.CANON_LANGUAGES }} |
| 31 | + CANON_LANGUAGE_DEFAULT: ${{ vars.CANON_LANGUAGE_DEFAULT }} |
| 32 | + CANON_LOGICLAYER_CUBE: ${{ vars.CANON_LOGICLAYER_CUBE }} |
| 33 | + CANON_LOGICLAYER_SLUGS: ${{ vars.CANON_LOGICLAYER_SLUGS }} |
| 34 | + CANON_LOGINS: ${{ vars.CANON_LOGINS }} |
| 35 | + GA_KEYFILE: ${{ vars.GA_KEYFILE }} |
| 36 | + |
| 37 | + |
| 38 | +jobs: |
| 39 | + build: |
| 40 | + environment: development-vm |
| 41 | + runs-on: ubuntu-latest |
| 42 | + |
| 43 | + steps: |
| 44 | + - name: Checkout code |
| 45 | + uses: actions/checkout@v4 |
| 46 | + |
| 47 | + - name: Authenticate with Google Cloud |
| 48 | + uses: google-github-actions/auth@v2 |
| 49 | + with: |
| 50 | + credentials_json: ${{ secrets.GCP_SA_KEY }} |
| 51 | + |
| 52 | + - name: Build Docker Image |
| 53 | + run: |- |
| 54 | + gcloud builds submit \ |
| 55 | + --quiet \ |
| 56 | + --timeout=30m \ |
| 57 | + --config=cloudbuild.yml \ |
| 58 | + --substitutions=_GCP_PROJECT_ID=${{ env.GCP_PROJECT_ID }},_GCP_ARTIFACT_REGISTRY_NAME=${{ env.GCP_ARTIFACT_REGISTRY_NAME }},_GCP_ARTIFACT_REGISTRY_LOCATION=${{ env.GCP_ARTIFACT_REGISTRY_LOCATION }},_GCP_IMAGE_NAME=${{ env.GCP_IMAGE_NAME }},_GCP_IMAGE_TAG=${{ github.sha }},_GCP_IMAGE_ENVIRONMENT=${{ env.GCP_IMAGE_NAME }} |
| 59 | +
|
| 60 | + deploy: |
| 61 | + needs: build |
| 62 | + environment: development-vm |
| 63 | + runs-on: ubuntu-latest |
| 64 | + |
| 65 | + steps: |
| 66 | + - name: Checkout code |
| 67 | + uses: actions/checkout@v4 |
| 68 | + |
| 69 | + - name: Authenticate with Google Cloud |
| 70 | + uses: google-github-actions/auth@v2 |
| 71 | + with: |
| 72 | + credentials_json: ${{ secrets.GCP_SA_KEY }} |
| 73 | + |
| 74 | + - name: Deploy to Compute Engine |
| 75 | + run: | |
| 76 | + SSH_DIR=~/.ssh |
| 77 | + mkdir -p $SSH_DIR |
| 78 | + echo "${{ secrets.GCP_SSH_PRIVATE_KEY }}" > $SSH_DIR/id_rsa |
| 79 | + chmod 600 $SSH_DIR/id_rsa |
| 80 | + ssh-keyscan -H ${{ env.GCP_VM_IP }} >> $SSH_DIR/known_hosts |
| 81 | +
|
| 82 | + # Define remote path |
| 83 | + REMOTE_PATH="/home/${{ env.GCP_VM_USER }}/${{ env.GCP_ARTIFACT_REGISTRY_NAME }}-${{ env.GCP_IMAGE_NAME }}" |
| 84 | +
|
| 85 | + # Create remote directory and transfer files in one SSH session |
| 86 | + echo "Creating remote path" |
| 87 | + ssh -i $SSH_DIR/id_rsa ${{ env.GCP_VM_USER }}@${{ env.GCP_VM_IP }} "mkdir -p $REMOTE_PATH" |
| 88 | + echo "Sending files" |
| 89 | + scp -i $SSH_DIR/id_rsa compose.yaml deploy_to_vm.sh ${{ env.GCP_VM_USER }}@${{ env.GCP_VM_IP }}:$REMOTE_PATH |
| 90 | +
|
| 91 | + ssh -i $SSH_DIR/id_rsa ${{ env.GCP_VM_USER }}@${{ env.GCP_VM_IP }} 'bash -s' << 'ENDSSH' |
| 92 | +
|
| 93 | + # Go to working directory |
| 94 | + echo "Going to working directory" |
| 95 | + cd "/home/${{ env.GCP_VM_USER }}/${{ env.GCP_ARTIFACT_REGISTRY_NAME }}-${{ env.GCP_IMAGE_NAME }}" |
| 96 | +
|
| 97 | + # Create .env.gcp file |
| 98 | + echo "Creating .env.gcp file" |
| 99 | + { |
| 100 | + echo "GCP_IMAGE_TAG=${{ github.sha }}" |
| 101 | + echo "GCP_PROJECT_ID=${{ env.GCP_PROJECT_ID }}" |
| 102 | + echo "GCP_IMAGE_NAME=${{ env.GCP_IMAGE_NAME }}" |
| 103 | + echo "GCP_ARTIFACT_REGISTRY_NAME=${{ env.GCP_ARTIFACT_REGISTRY_NAME }}" |
| 104 | + echo "GCP_ARTIFACT_REGISTRY_LOCATION=${{ env.GCP_ARTIFACT_REGISTRY_LOCATION }}" |
| 105 | + echo "GCP_VM_USER=${{ env.GCP_VM_USER }}" |
| 106 | + echo "CANON_DB_HOST=${{ secrets.CANON_DB_HOST}}" |
| 107 | + echo "CANON_DB_PW=${{ secrets.CANON_DB_PW}}" |
| 108 | + echo "CANON_HOTJAR=${{ secrets.CANON_HOTJAR}}" |
| 109 | + echo "CANON_API=${{ env.CANON_API }}" |
| 110 | + echo "CANON_CMS_CUBES=${{ env.CANON_CMS_CUBES }}" |
| 111 | + echo "CANON_CMS_ENABLE=${{ env.CANON_CMS_ENABLE }}" |
| 112 | + echo "CANON_CMS_FORCE_HTTPS=${{ env.CANON_CMS_FORCE_HTTPS }}" |
| 113 | + echo "CANON_CMS_GENERATOR_TIMEOUT=${{ env.CANON_CMS_GENERATOR_TIMEOUT }}" |
| 114 | + echo "CANON_CMS_LOGGING=${{ env.CANON_CMS_LOGGING }}" |
| 115 | + echo "CANON_CMS_MINIMUM_ROLE=${{ env.CANON_CMS_MINIMUM_ROLE }}" |
| 116 | + echo "CANON_CMS_REQUESTS_PER_SECOND=${{ env.CANON_CMS_REQUESTS_PER_SECOND }}" |
| 117 | + echo "CANON_CONST_CART=${{ env.CANON_CONST_CART }}" |
| 118 | + echo "CANON_CONST_CUBE=${{ env.CANON_CONST_CUBE }}" |
| 119 | + echo "CANON_CONST_TESSERACT=${{ env.CANON_CONST_TESSERACT }}" |
| 120 | + echo "CANON_DB_NAME=${{ env.CANON_DB_NAME }}" |
| 121 | + echo "CANON_DB_USER=${{ env.CANON_DB_USER }}" |
| 122 | + echo "CANON_GEOSERVICE_API=${{ env.CANON_GEOSERVICE_API }}" |
| 123 | + echo "CANON_GOOGLE_ANALYTICS=${{ env.CANON_GOOGLE_ANALYTICS }}" |
| 124 | + echo "CANON_LANGUAGES=${{ env.CANON_LANGUAGES }}" |
| 125 | + echo "CANON_LANGUAGE_DEFAULT=${{ env.CANON_LANGUAGE_DEFAULT }}" |
| 126 | + echo "CANON_LOGICLAYER_CUBE=${{ env.CANON_LOGICLAYER_CUBE }}" |
| 127 | + echo "CANON_LOGICLAYER_SLUGS=${{ env.CANON_LOGICLAYER_SLUGS }}" |
| 128 | + echo "CANON_LOGINS=${{ env.CANON_LOGINS }}" |
| 129 | + echo "GA_KEYFILE=${{ env.GA_KEYFILE }}" |
| 130 | + } > .env.gcp |
| 131 | +
|
| 132 | + echo "Adding Google Analytics credentials to ./google directory" |
| 133 | + mkdir -p ./google |
| 134 | +
|
| 135 | + cat << EOF > ./google/googleAnalyticsKey.json |
| 136 | + ${{ secrets.GA_KEYFILE }} |
| 137 | + EOF |
| 138 | +
|
| 139 | + bash ./deploy_to_vm.sh |
| 140 | +
|
| 141 | + ENDSSH |
0 commit comments