Gitflow
Gitflow is a popular branching model that provides a structured approach to managing feature development, releases, and hotfixes. By leveraging Terrateam’s destination branches and tags features, you can implement a Gitflow-style workflow for your infrastructure as code projects, ensuring a consistent and organized development process.
Gitflow Branching Model
The Gitflow branching model consists of the following main branches:
main
(or master
)
Represents the production-ready state of your infrastructure.
develop
Serves as the integration branch for feature development and acts as a staging area before merging changes into main
.
feature/*
Used for developing new features or enhancements. Each feature branch is created from develop
and merged back into develop
when complete.
release/*
Used for preparing a new release. Release branches are created from develop
, and once they are stable, they are merged into both main
and develop
.
hotfix/*
Used for addressing critical issues in production. Hotfix branches are created from main
, and once the fix is complete, they are merged into both main
and develop
.
Configuring Destination Branches and Tags for Gitflow
To implement a Gitflow-style workflow with Terrateam, you can use the destination_branches
, tags
, and workflows
configuration in your .terrateam/config.yml
file. Here’s an example configuration:
In this configuration:
- The
tags
section defines thedest_branch
tag with three possible values:main
,staging
, anddev
. Each value is associated with a regular expression that matches the corresponding branch name. - The
destination_branches
section specifies the allowed combinations of destination branches and source branches. For example, pull requests targeting themain
branch are allowed only from thestaging
branch. - The
workflows
section defines different workflows based on thedest_branch
tag. Each workflow sets the appropriate environment variables and runs the necessary Terraform commands based on the destination branch.
Workflow Example
Let’s walk through an example of how the Gitflow workflow can be implemented with Terrateam using the above configuration:
-
Feature Development
1. Create a new feature branch from
dev
:feature/add-new-resource
2. Make the necessary changes to your Terraform code in the feature branch
3. Open a pull request from
feature/add-new-resource
todev
4. Terrateam will run plans on the pull request, allowing you to review the proposed changes in the
dev
environment5. After the pull request is approved and merged, the changes will be incorporated into
dev
-
Staging Deployment
1. When you’re ready to deploy the changes to staging, create a pull request from
dev
tostaging
2. Terrateam will run plans and applies on the staging environment, ensuring that the infrastructure is properly provisioned
3. If any issues are found during the staging deployment, fix them directly in the
dev
branch and repeat the process4. Once the changes are stable in staging, merge the pull request into
staging
-
Production Release
1. When you’re ready to release the changes to production, create a pull request from
staging
tomain
2. Terrateam will run plans and applies on the production environment, ensuring that the changes are properly deployed
3. If any issues are found during the production release, fix them directly in the
staging
branch and repeat the process4. Once the changes are stable in production, merge the pull request into
main
-
Hotfix
1. If a critical issue is discovered in production, create a new hotfix branch from
main
:hotfix/fix-critical-bug
2. Make the necessary fixes in the hotfix branch
3. Open a pull request from
hotfix/fix-critical-bug
tomain
4. Terrateam will run plans and applies on the production environment, ensuring that the fix is properly implemented
5. After the pull request is approved and merged, the hotfix will be deployed to production
6. Merge the hotfix branch back into
dev
to ensure that the fix is included in future releases
Best Practices
When implementing a Gitflow workflow with Terrateam, consider the following best practices:
- Ensure that your destination branches and tags configuration accurately reflects your desired branching model and workflow
- Use descriptive and meaningful names for your branches, following the Gitflow naming conventions
- Regularly update your
dev
branch with the latest changes frommain
to keep it in sync