¡Hola developer 👋🏻! Este repositorio contiene un ejemplo de cómo trabajar con IssueOps, utilizando Issue Forms, GitHub Actions, Terraform para el despliegue de infraestructura y Microsoft Azure como destino. Si quieres verlo en funcionamiento puedes echar un vistazo a este vídeo de mi canal de YouTube:
Para poder usar este repositorio necesitas:
- Crear las etiquetas que se usan para los diferentes tipos de arquitecturas que están disponibles en este repo:
issueops:web,issueops:kuberneteseissueops:storage. Estas van a ayudar a los flujos de GitHub Actions a elegir una plantilla y archivos de Terraform en concreto. - Registrar una aplicación en Microsoft Entra ID que nos permita desplegar los recursos en Azure a través de Terraform. Puedes hacerlo con esta línea:
az login AZURE_CREDENTIALS=$(az ad sp create-for-rbac --name "issueOps-advanced" --role contributor --scopes /subscriptions/$(az account show --query id -o tsv))- Crear los siguientes secretos para los flujos de GitHub Actions:
TF_SUBSCRIPTION_ID: El Id de la suscripción donde vas a desplegar los recursos.TF_CLIENT_ID: Client Id recuperado del comando anterior.TF_CLIENT_SECRET: Password recuperado del comando anterior.TF_TENANT_ID: El Id del tenant donde se encuentra la suscripción donde vas a desplegar los recursos.
Para hacerlo de forma sencilla puedes utilizar GitHub CLI:
gh auth login gh secret set TF_SUBSCRIPTION_ID -b"$(az account show --query id -o tsv)" gh secret set TF_CLIENT_ID -b"$(echo $AZURE_CREDENTIALS | jq -r .appId)" gh secret set TF_CLIENT_SECRET -b"$(echo $AZURE_CREDENTIALS | jq -r .password)" gh secret set TF_TENANT_ID -b"$(az account show --query tenantId -o tsv)"- Una cuenta de Azure Storage donde se va a guardar los estados de terraform de las diferentes arquitecturas que se creen en base a las peticiones.
LOCATION="spaincentral" RG_NAME="issueOps-advanced" STORAGE_NAME="issueopsadvanced" CONTAINER_NAME="tfstate" az group create --name $RG_NAME --location $LOCATION az storage account create --name $STORAGE_NAME --resource-group $RG_NAME --location $LOCATION --sku Standard_LRS az storage container create --name $CONTAINER_NAME --account-name $STORAGE_NAME- Los secretos asociados a la cuenta de storage que son:
TF_STATE_RESOURCE_GROUP_NAMETF_STATE_AZURE_STORAGE_NAMETF_STATE_CONTAINER_NAMETF_STATE_STORAGE_ACCESS_KEY
También puedes hacerlo con GitHub CLI:
ACCESS_KEY=$(az storage account keys list --account-name $STORAGE_NAME --resource-group $RG_NAME --query "[0].value" -o tsv) gh secret set TF_STATE_RESOURCE_GROUP_NAME -b"$RG_NAME" gh secret set TF_STATE_AZURE_STORAGE_NAME -b"$STORAGE_NAME" gh secret set TF_STATE_CONTAINER_NAME -b"$CONTAINER_NAME" gh secret set TF_STATE_STORAGE_ACCESS_KEY -b"$ACCESS_KEY"