Skip to content

CD Pipeline

CD Pipeline #5

Workflow file for this run

name: CD Pipeline
on:
workflow_dispatch:
jobs:
provision-infrastructure:
name: Provision AWS Infrastructure with Terraform
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Set up Terraform
uses: hashicorp/setup-terraform@v1
- name: Initialize Terraform
run: terraform init \
-backend-config="bucket=${{ secrets.TF_VAR_BUCKET }}" \
-backend-config="region=${{ secrets.AWS_DEFAULT_REGION }}" \
working-directory: infra/provisioning
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
- name: Terraform Plan
run: terraform plan -lock-timeout=600s -compact-warnings -out=plan.tfplan
working-directory: infra/provisioning
env:
TF_VAR_key_pair: ${{ secrets.TF_VAR_KEY_PAIR }}
- name: Upload Terraform Plan Artifact
uses: actions/upload-artifact@v3
with:
name: terraform-plan
path: infra/provisioning/plan.tfplan
apply-terraform:
name: Apply Terraform Plan
runs-on: ubuntu-latest
needs: provision-infrastructure
environment: dev
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Set up Terraform
uses: hashicorp/setup-terraform@v1
- name: Download Terraform Plan Artifact
uses: actions/download-artifact@v3
with:
name: terraform-plan
- name: Apply Terraform Plan
run: terraform apply "plan.tfplan"
working-directory: infra/provisioning
- name: Get EC2 instance public IP
id: get_ip
run: echo "::set-output name=ec2_public_ip::$(terraform output -raw ec2_public_ip)"
working-directory: infra/provisioning
deploy-stack:
name: Deploy Monitoring Stack with Ansible
runs-on: ubuntu-latest
needs: apply-terraform
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Install Ansible
run: sudo apt-get install -y ansible
- name: Create Ansible inventory
run: |
echo "[gbfs]" > inventory.ini
echo "gbfs-instance ansible_host=${{ steps.get_ip.outputs.ec2_public_ip }} ansible_user=ec2-user ansible_ssh_private_key_file=${{ secrets.SSH_PRIVATE_KEY }} ansible_ssh_common_args='-o StrictHostKeyChecking=no'" >> inventory.ini
- name: Deploy GBFS Monitoring Stack
run: ansible-playbook playbooks/gbfs.yaml -i inventory.ini
working-directory: infra/deployment
env:
ANSIBLE_HOST_KEY_CHECKING: false