Skip to content

Commit

Permalink
Adds workflow for deploying Jenkins into test account
Browse files Browse the repository at this point in the history
  • Loading branch information
gabebatista committed Oct 18, 2024
1 parent f6b48d4 commit 208ca4b
Show file tree
Hide file tree
Showing 3 changed files with 187 additions and 4 deletions.
183 changes: 183 additions & 0 deletions .github/workflows/jenkins-deployment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
name: Jenkins Deployment Test

env:
TF_VAR_fully_qualified_domain_name: ${{ secrets.CI_FULLY_QUALIFIED_DOMAIN_NAME }}
STATE_BUCKET_NAME: ${{ secrets.TF_REMOTE_STATE_BUCKET_NAME }}

# Triggers on any changes to modules/jenkins
on:
pull_request: # change to pull_request before publish
paths:
- 'modules/jenkins/**'
# - '.github/workflows/**'
workflow_dispatch:

permissions:
id-token: write
contents: read
issues: write

jobs:
# Plan: Generates a tf plan of the deployment and posts it as a comment in the triggering PR
plan:
runs-on: ubuntu-latest
environment: aws-ci
defaults:
run:
working-directory: modules/jenkins/examples/complete
steps:
# Retrieve necessary AWS permissions
- name: configure aws credentials
uses: aws-actions/[email protected]
with:
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
role-session-name: GitHub_to_AWS_via_FederatedOIDC
aws-region: ${{ vars.AWS_REGION }}
# Checkout Repository
- name: Checkout Git Repository
uses: actions/[email protected]
with:
ref: ${{ github.ref }}
# Install Terraform
- name: Install Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: 1.6.3
# Inject remote state block
# This is required to enable remote state
- name: Inject Remote State
run: |
cat > backend.tf << EOF
terraform {
backend "s3" {
}
}
# Initialize S3 remote state
# The triggering commit hash is used as the key of the remote state
- name: Terraform init
id: init
run: |
terraform init -backend-config="bucket=${STATE_BUCKET_NAME}" -backend-config="key=${{ github.sha }}" -backend-config="region=${{ vars.AWS_REGION }}"
# Generate tf plan
- name: Terraform plan
id: plan
run: |
terraform plan -no-color
# Post the tf plan as a comment in the triggering PR
- name: Update Pull Request
uses: actions/github-script@v7
with:
github-token: ${{ secrets.BOT_PAT }}
script: |
const output = #### Terraform Plan 📖\`${{ steps.plan.outcome }}\`
<details><summary>Show Plan</summary>
\`\`\`\n
${{ steps.plan.outputs.stdout }}
\`\`\`
</details>
*Pushed by: @${{ github.actor }}, Action: \`${{ github.event_name }}\`*`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
# Deploy: After manual approval, deploys the solution to the designated AWS account
deploy:
needs: [ plan ]
environment: aws-ci
runs-on: ubuntu-latest
defaults:
run:
working-directory: modules/jenkins/examples/complete
steps:
# Checkout Repository
- name: Checkout Git Repository
uses: actions/[email protected]
with:
ref: ${{ github.ref }}
# Retrieve necessary AWS permissions
- name: configure aws credentials
uses: aws-actions/[email protected]
with:
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
role-session-name: GitHub_to_AWS_via_FederatedOIDC
aws-region: ${{ vars.AWS_REGION }}
# Install Terraform
- name: Install Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: 1.6.3
# Inject remote state block
# This is required to enable remote state
- name: Inject Remote State
run: |
cat > backend.tf << EOF
terraform {
backend "s3" {
}
}
# Initialize S3 remote state
# The triggering commit hash is used as the key of the remote state
- name: Terraform init
id: init
run: |
terraform init -backend-config="bucket=${STATE_BUCKET_NAME}" -backend-config="key=${{ github.sha }}" -backend-config="region=${{ vars.AWS_REGION }}"
# Deploys the solution
- name: Terraform apply
run: |
terraform apply -auto-approve
# Destroy: After manual approval, destroy the solution in the designated AWS account
destroy:
needs: [ deploy ]
runs-on: ubuntu-latest
environment: aws-ci
defaults:
run:
working-directory: modules/jenkins/examples/complete
steps:
# Checkout Repository
- name: Checkout Git Repository
uses: actions/[email protected]
with:
ref: ${{ github.ref }}
# Retrieve necessary AWS permissions
- name: configure aws credentials
uses: aws-actions/[email protected]
with:
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
role-session-name: GitHub_to_AWS_via_FederatedOIDC
aws-region: ${{ vars.AWS_REGION }}
# Install Terraform
- name: Install Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: 1.6.3
# Inject remote state block
# This is required to enable remote state
- name: Inject Remote State
run: |
cat > backend.tf << EOF
terraform {
backend "s3" {
}
}
# Initialize S3 remote state
# The triggering commit hash is used as the key of the remote state
- name: Terraform init
id: init
run: |
terraform init -backend-config="bucket=${STATE_BUCKET_NAME}" -backend-config="key=${{ github.sha }}" -backend-config="region=${{ vars.AWS_REGION }}"
# Destroys the solution
- name: Terraform Destroy
run: |
terraform destroy -auto-approve
2 changes: 1 addition & 1 deletion modules/jenkins/examples/complete/versions.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "5.66.0"
version = "5.70.0"
}
}
}
6 changes: 3 additions & 3 deletions modules/jenkins/examples/complete/vpc.tf
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,9 @@ resource "aws_route_table" "private_rt" {

# route to the internet through NAT gateway
resource "aws_route" "private_rt_nat_gateway" {
route_table_id = aws_route_table.private_rt.id
destination_cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.nat_gateway.id
route_table_id = aws_route_table.private_rt.id
destination_cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.nat_gateway.id
}

resource "aws_route_table_association" "private_rt_asso" {
Expand Down

0 comments on commit 208ca4b

Please sign in to comment.