SecretId
and SecretKey
on the Manage API Key page..├── README.md├── environments│ ├── dev│ │ ├── main.tf│ │ └── provider.tf│ └── prod│ ├── cicd│ │ └── main.tf│ ├── local.tf│ ├── main.tf│ ├── provider.tf│ └── qta│ └── main.tf└── modules├── network│ ├── main.tf│ ├── outputs.tf│ ├── provider.tf│ └── variables.tf├── security_group│ ├── main.tf│ ├── outputs.tf│ ├── provider.tf│ └── variables.tf└── tke├── main.tf├── outputs.tf├── provider.tf└── variables.tf
environments
and modules
directories.environments
directory isolates dev
and prod
environments and sets different configurations for different environments. Each environment directory is an independent root module.dev
demonstrates how to create a VPC.prod
demonstrates how to isolate businesses through workspace
. VPCs are created in the cicd
directory, and container clusters are created in the qta
directory.modules
encapsulates resource information for reuse. Here, it contains demo modules of the VPC, security group, and TKE.https://github.com/${USER}/${PROJECT}/settings/secrets/actions
. Replace the secrets with the copied SecretId
and SecretKey
.
.github/workflows/
directory. For more information on the workflow configuration, see Related Operations.dev
branch needs to be updated, the update will be triggered only in dev
. After the configuration update, submit the pull request and merge the code into main
(main branch). In this way, the system does not need to scan all the sub-directories of environments
for update checks, reducing unnecessary state sync operations.terraform fmt
, terraform init
, terraform validate
, and terraform plan
to check the code and display the build plan, so as to determine whether to execute the deployment.terraform plan
is as expected, you can perform the merge operation.terraform apply
) as shown below:environment
is entered, the system will check whether a sub-directory exists, and if so, the system will isolate different business environments (such as qta
and ci
) through workspace
; if not, the specified directory is equivalent to a common root module.# This is a basic workflow to help you get started with Actionsname: CI# Controls when the workflow will runon:pull_request:# A workflow run is made up of one or more jobs that can run sequentially or in paralleljobs:# This workflow contains a single job called "build"build:# The type of runner that the job will run onruns-on: ubuntu-latestenv:TENCENTCLOUD_SECRET_KEY: ${{ secrets.TENCENTCLOUD_SECRET_KEY }}TENCENTCLOUD_SECRET_ID: ${{ secrets.TENCENTCLOUD_SECRET_ID }}# Steps represent a sequence of tasks that will be executed as part of the jobsteps:- uses: actions/checkout@v3- uses: hashicorp/setup-terraform@v2with:terraform_wrapper: false- name: check envrun: |if [ ! -d "environments/$GITHUB_HEAD_REF" ]; thenecho "*************************SKIPPING************************************"echo "Branch '$GITHUB_HEAD_REF' does not represent an oficial environment."echo "*********************************************************************"exit 1fi- name: terraform fmtid: fmtrun: terraform fmt -recursive -check- name: terraform initid: initworking-directory: environments/${{ github.head_ref }}run: terraform init- name: terraform validateid: validateworking-directory: environments/${{ github.head_ref }}run: terraform validate- name: terraform planid: planif: github.event_name == 'pull_request'working-directory: environments/${{ github.head_ref }}run: |plan_info=""dir_count=`ls -l | grep "^d" | wc -l`if [ $dir_count -gt 0 ]; thenfor dir in ./*/doenv=${dir%*/}env=${env#*/}echo ""echo "========> Terraform Plan <========"echo "At environment: ${{ github.head_ref }}"echo "At workspace: ${env}"echo "=================================="terraform workspace select ${env} || terraform workspace new ${env}plan_info="$plan_info\\n$(terraform plan -no-color)"doneelseplan_info="$(terraform plan -no-color)"fiplan_info="${plan_info//'%'/'%25'}"plan_info="${plan_info//$'\\n'/'%0A'}"plan_info="${plan_info//$'\\r'/'%0D'}"echo "::set-output name=plan_info::$plan_info"continue-on-error: true- uses: actions/github-script@v6if: github.event_name == 'pull_request'with:script: |const output = `#### Terraform Format and Style \\`${{ steps.fmt.outcome }}\\`#### Terraform Initialization \\`${{ steps.init.outcome }}\\`#### Terraform Validation \\`${{ steps.validate.outcome }}\\`#### Terraform Plan \\`${{ steps.plan.outcome }}\\`<details><summary>Show Plan</summary>\\`\\`\\`\\n${{ steps.plan.outputs.plan_info }}\\`\\`\\`</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})
name: Applyon:pull_request:types:- closedbranches:- mainjobs:build:if: github.event.pull_request.merged == trueruns-on: ubuntu-latestenv:TENCENTCLOUD_SECRET_KEY: ${{ secrets.TENCENTCLOUD_SECRET_KEY }}TENCENTCLOUD_SECRET_ID: ${{ secrets.TENCENTCLOUD_SECRET_ID }}steps:- uses: actions/checkout@v3- uses: hashicorp/setup-terraform@v2- name: terraform initid: initworking-directory: environments/${{ github.head_ref }}run: terraform init- name: terraform applyworking-directory: environments/${{ github.head_ref }}run: |dir_count=`ls -l | grep "^d" | wc -l`if [ $dir_count -gt 0 ]; thenfor dir in ./*/doenv=${dir%*/}env=${env#*/}echo ""echo "========> Terraform Apply <========"echo "At environment: ${{ github.head_ref }}"echo "At workspace: ${env}"echo "=================================="terraform workspace select ${env} || terraform workspace new ${env}terraform apply -auto-approvedoneelseterraform apply -auto-approvefi
Was this page helpful?