Continuous Integration and Deployment
Black Lung utilizes an Azure DevOps repository to hold the code for all Azure cloud infrastructure. Through this repository a series of pipelines run to achieve continuous integration and deployment across the Black Lung Azure cloud environment through service connections.

Pipelines
Each repository has the following pipelines. Note, these pipelines can only act upon resources that they’ve deployed. It will not track, change, or destroy resources deployed manually or by other pipelines.
| Pipeline | Description |
|---|---|
| Black Lung Dev/Prod | Runs when a code push is approved to the master branch. |
| Drift Check | Runs once a day and scans the Azure environment for any differences between what’s deployed and what’s in the repository. If any are found it will change the environment to match the repository and notify relevant parties. |
| Tear Down | Must be initiated manually by privileged user(s). Will run a basic terraform destroy command against the azure environment. |
Terraform
Inside each repository all terraform files are held under a single directory. These terraform files can be generalized as context files and deployment files. Context files supply information like naming conventions, variables, versions, and project configuration files. Deployment files are responsible for reading context and deploying required resources as listed by the context. Any example of a deployment file would be static_site, which is responsible for deploying all Black Lung static websites. Project configuration files are used to indicated if they’re enabled, what terraform deployment file is used to deploy the project, and any relevant parameters.