Problemáticas
Azure DevOps
Rebase automation
jenkins
pipelines
terraform
terratest
liquibase
bdd
DevOps
Resource Group
App Service
Rebase 1
Rebase 2
Settigns AppService
Resource Group
App Service
Settigns AppService
Storage Account
Rebase 10
Resource Group
App Service
Settigns AppService
Storage Account
Key Vault
Database 1
Database 2
Slot
Storage Account 2
Traffic manager
Settigns AppService Slot
Azure DevOps
Proyectos cloud
Agentes
Build
que utilizamos?
Ciclo Proyecto Cloud. - Version Manager
Code
Dev
BUILD
Version Manager
Storage Account
RELEASE
Productos
Rebase Automation
REBASE AUTOMATION
JENKINS Y PIPELINES
Servidor automatizacion Open Source
PIPELINE
Que es?
define el ciclo de vida de las aplicaciones mediante flujos
En que esta hecho
Ventajas
Crear flujos complejos y sencillos de entender para CI
Sobreviven a reinicios de servidor
Pausados... esperan a acciones para continuar flujo
NODOS
python
REBASE AUTOMATION
STEP
Tareas o comandos del flujo de trabajo
NODE
Agrupacion de tareas que comparten un workspace
STAGE
Etapas logicas del flujo de trabajo. Cada stage puede estar compuesto por un conjunto de steps, y cada node puede contener un conjunto de stages
PIPELINES
pipeline {
parameters {
string(description: '', name: 'PRODUCT')
string(description: '', name: 'CHANNEL')
string(description: '', name: 'PLAN_CREDENTIALS')
}
environment {
FOLDER = "/tmp/${params.PRODUCT}-"
PLAN = "${plan}"
DEVOPS_CREDENTIALS = "${devops_credentials}"
PLAN_CREDENTIALS = "${plan_credentials}"
}
agent {label 'devops'}
stages {
stage('Startup Rebase') {
steps {
echo "Startup Rebase"
echo "${plan}"
echo sh(returnStdout: true, script: 'env')
withPythonEnv('python3') {
sh 'pip3 install azure'
sh 'pip3 install slacker'
sh 'python3 $WORKSPACE/rebase/rebase_automation.py "startup"'
}
}
}
stage('Rebase approval') {
input {
message "Rebase Automation: ${PRODUCT}"
ok "Yes."
}
steps {
echo "Hello, nice to meet you."
}
stage('Rebase approval') {
input {
message "Rebase Automation: ${PRODUCT}"
ok "Yes."
}
steps {
echo "Approval."
}
}
stage('Infrastructure (Apply)') {
steps {
withPythonEnv('python3') {
sh 'python3 $WORKSPACE/rebase/rebase_automation.py "apply"'
}
}
}
stage('Copy files (Resources)') {
steps {
withPythonEnv('python3') {
sh 'python3 $WORKSPACE/rebase/rebase_automation.py "resources"'
}
}
}
Configuracion de Productos
automation
manager
files-templates
rebase
source
database
infrastructure
integration test
2018.12.14.1
2018.12.14.2
2018.12.14.3
2018.12.14.4
Configuracion release azure devops
Azure DevOps
Plan de productos rebase automation
1
Entradas
Plan
Secret
Iniciar
Infra
Terraform
Salidas
Copy Files
Database
Liquibase
Deploy Slot
Cucumber
Database
Liquibase
Swap
Allure
Cucumber
Allure
Terraform
2
Terraform es una herramienta de orquestación de código abierto desarrollado por Hashicorp que nos permite definir nuestra infraestructura como código
Terraform - Modulos
2
Init
Plan
Apply
Destroy
State Terraform
Container
variable "name_prefix_g" {
description = "unique part of the name to give to resources"
}
variable "channel_g" {
description = "describe channel of product"
}
variable "location_g" {
description = "region where the resources should exist"
}
variable "tier_sp" {
description = "tier service plan product"
}
variable "size_sp" {
description = "size service plan web app product"
}
variable "admin_username_db" {
description = "size service plan web app product"
}
variable "admin_password_db" {
description = "size service plan web app product"
}
variable "credential" {
type = "map"
}
variable "start_ip_address_sdb_biz" {
description = "ip range bizagi access"
}
variable "start_ip_address_sdb_jenkins" {
description = "ip server jenkins"
}
variable "start_ip_address_sdb_portal" {
description = "ip server portal"
}
variable "size_db" {
description = "size database"
}
variable "size_db_slot" {
description = "size database slot"
}
variable "account_replication_type" {
description = "type of replication to storage account"
}
variable "app_services_settings" {
type = "map"
}
variable "app_services_slot_settings" {
type = "map"
}
variable "access_key_aws" {
description = "aws acceskey"
}
variable "secret_key_aws" {
description = "aws secret"
}
variable "region_aws" {
description = "aws region"
}
variable "zone_id_aws" {
description = "aws zone hostedid aws"
}
variable "type_aws" {
description = "aws type register cname aws"
}
variable "ttl_aws" {
description = "aws register ttl"
}
variable "dns_app_aws" {
description = "aws register ttl"
}
variable "domain_biz_aws" {
description = "aws register ttl"
}
variable "key_vault_id" {
description = "key vault id"
}
variable "microsoft_web_objectid" {
description = "object id micropsoft web app"
}
variable "container_assets" {
description = ""
}
variable "container_dbbackups" {
description = ""
}
variable "container_jsonexecutions" {
description = ""
}
variable "container_jsontemplates" {
description = ""
}
variable "automationManagerProductInstanceQueueName" {
description = ""
}
variable "automationManagerProductInstanceQueueName_slot" {
description = ""
}
variable "product_instance_bizagi_paas_trial" {
description = ""
}
variable "product_instance_bizagi_paas_trial_slot" {
description = ""
}
variable "product_instance_queue_debug" {
description = ""
}
variable "product_instance_queue_debug_slot" {
description = ""
}
variable "run_baseline_client" {
description = ""
}
variable "run_baseline_client_slot" {
description = ""
}
variable "automationManagerAmazonAccessKey" {
description = ""
}
variable "automationManagerAmazonSecretKey" {
description = ""
}
variable "automationManagerSmtpPassword" {
description = ""
}
variable "bizagiGatewayToken" {
description = ""
}
variable "bizagiGatewayTokenSlot" {
description = ""
}
variable "automationManagerBizagiHostZoneId" {
description = ""
}
variable "releaseManagementStorageStringConnection" {
description = ""
}
provider "azurerm" {
subscription_id = "${var.credential["subscription_id"]}"
client_id = "${var.credential["client_id"]}"
client_secret = "${var.credential["client_secret"]}"
tenant_id = "${var.credential["tenant_id"]}"
}
provider "aws" {
access_key = "${var.access_key_aws}"
secret_key = "${var.secret_key_aws}"
region = "${var.region_aws}"
}
locals {
bizagi_database_template = "https://${azurerm_storage_account.sa.name}.blob.core.windows.net/dbbizagi/BizagiDatabaseTemplate-468.bacpac"
connection_string = "Server=tcp:${azurerm_sql_server.sdb.fully_qualified_domain_name},1433;Initial Catalog=${azurerm_sql_database.db.name};Persist Security Info=False;User ID=${azurerm_sql_server.sdb.administrator_login};Password=${azurerm_sql_server.sdb.administrator_login_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
connection_string_slot = "Server=tcp:${azurerm_sql_server.sdb.fully_qualified_domain_name},1433;Initial Catalog=${azurerm_sql_database.db_slot.name};Persist Security Info=False;User ID=${azurerm_sql_server.sdb.administrator_login};Password=${azurerm_sql_server.sdb.administrator_login_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
url_app = "${var.location_g}-app-${var.name_prefix_g}-${var.channel_g}"
azure_domain = "azurewebsites.net"
connection_string_storage = "DefaultEndpointsProtocol=https;AccountName=${azurerm_storage_account.sa.name};AccountKey=${azurerm_storage_account.sa.primary_access_key}"
instrumentation_key_app = "${azurerm_application_insights.app_ins.instrumentation_key}"
json_executions_container = "${var.container_jsonexecutions}"
client_id = "${var.credential["client_id"]}"
app_insights_instrumentation_key = "${azurerm_application_insights.app_ins.instrumentation_key}"
json_templates_container = "${var.container_jsontemplates}"
storage_string_connection = "${local.connection_string_storage}"
key_vault_base_url = "${azurerm_key_vault.kv.vault_uri}"
key_vault_base_url_slot = "${azurerm_key_vault.kv_slot.vault_uri}"
queue_name_run_baseline_client = "${var.automationManagerProductInstanceQueueName}"
queue_name_run_baseline_client_slot = "${var.automationManagerProductInstanceQueueName_slot}"
db_backups_container = "${var.container_dbbackups}"
client_secret = "${var.credential["client_secret"]}"
}
resource "random_id" "server" {
keepers = {
azi_id = 1
}
byte_length = 8
}
resource "random_id" "sa" {
keepers = {
azi_id = 1
}
byte_length = 8
}
resource "random_string" "key_vault_name" {
length = 2
special = false
override_special = "/@\" "
}
resource "azurerm_resource_group" "rg" {
name = "${var.location_g}-rg-${var.name_prefix_g}-${var.channel_g}"
location = "${var.location_g}"
}
resource "azurerm_app_service_plan" "sp" {
name = "${var.location_g}-sp-${var.name_prefix_g}-${var.channel_g}"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
sku {
tier = "${var.tier_sp}"
size = "${var.size_sp}"
}
}
resource "azurerm_sql_server" "sdb" {
name = "${var.location_g}-sdb-${var.name_prefix_g}-${var.channel_g}"
resource_group_name = "${azurerm_resource_group.rg.name}"
location = "${var.location_g}"
version = "12.0"
administrator_login = "${var.admin_username_db}"
administrator_login_password = "${var.admin_password_db}"
tags {
environment = "${var.name_prefix_g}"
}
}
resource "azurerm_sql_firewall_rule" "bizagiacces" {
name = "FirewallRuleBizagi"
resource_group_name = "${azurerm_resource_group.rg.name}"
server_name = "${azurerm_sql_server.sdb.name}"
start_ip_address = "${var.start_ip_address_sdb_biz}"
end_ip_address = "${var.start_ip_address_sdb_biz}"
depends_on = [
"azurerm_sql_server.sdb"]
}
resource "azurerm_sql_firewall_rule" "jenkinsaccess" {
name = "FirewallRueJenkins"
resource_group_name = "${azurerm_resource_group.rg.name}"
server_name = "${azurerm_sql_server.sdb.name}"
start_ip_address = "${var.start_ip_address_sdb_jenkins}"
end_ip_address = "${var.start_ip_address_sdb_jenkins}"
depends_on = [
"azurerm_sql_server.sdb"]
}
resource "azurerm_sql_firewall_rule" "portalaccess" {
name = "FirewallRuePortal"
resource_group_name = "${azurerm_resource_group.rg.name}"
server_name = "${azurerm_sql_server.sdb.name}"
start_ip_address = "${var.start_ip_address_sdb_portal}"
end_ip_address = "${var.start_ip_address_sdb_portal}"
depends_on = [
"azurerm_sql_server.sdb"]
}
resource "azurerm_sql_firewall_rule" "azure_services" {
name = "AllowAllAzureService"
resource_group_name = "${azurerm_resource_group.rg.name}"
server_name = "${azurerm_sql_server.sdb.name}"
start_ip_address = "0.0.0.0"
end_ip_address = "0.0.0.0"
}
resource "azurerm_sql_database" "db" {
name = "${var.name_prefix_g}-db-${var.channel_g}"
resource_group_name = "${azurerm_resource_group.rg.name}"
location = "${var.location_g}"
server_name = "${azurerm_sql_server.sdb.name}"
requested_service_objective_name = "${var.size_db}"
depends_on = [
"azurerm_sql_server.sdb"]
}
resource "azurerm_sql_database" "db_slot" {
name = "${var.name_prefix_g}-db-${var.channel_g}-slot"
resource_group_name = "${azurerm_resource_group.rg.name}"
location = "${var.location_g}"
server_name = "${azurerm_sql_server.sdb.name}"
requested_service_objective_name = "${var.size_db_slot}"
depends_on = [
"azurerm_sql_server.sdb"]
}
resource "azurerm_app_service" "app" {
name = "${var.location_g}-app-${var.name_prefix_g}-${var.channel_g}"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
app_service_plan_id = "${azurerm_app_service_plan.sp.id}"
site_config {
dotnet_framework_version = "v4.0"
scm_type = "LocalGit"
always_on = true
}
app_settings = "${merge(
map("APPINSIGHTS_INSTRUMENTATIONKEY",local.instrumentation_key_app),
map("automationManagerJsonExecutionsContainer",local.json_executions_container),
map("automationManagerAppInsightsInstrumentationKey",local.app_insights_instrumentation_key),
map("automationManagerJsonTemplatesContainer",local.json_templates_container),
map("automationManagerStorageStringConnection",local.storage_string_connection),
map("automationManagerKeyVaultBaseUrl",local.key_vault_base_url),
map("automationManagerProductInstanceQueueName",local.queue_name_run_baseline_client),
map("automationManagerDBbackupsContainer",local.db_backups_container),
map("automationManagerClientSecret",local.client_secret),
map("automationManagerClientId",local.client_id),
map("automationManagerBizagiDBTemplateStorage",local.bizagi_database_template),
var.app_services_settings)}"
connection_string {
name = "DefaultDatabase"
type = "SQLServer"
value = "${local.connection_string}"
}
connection_string {
name = "AzureWebJobsDashboard"
type = "SQLServer"
value = "${local.connection_string_storage}"
}
connection_string {
name = "AzureWebJobsStorage"
type = "SQLServer"
value = "${local.connection_string_storage}"
}
depends_on = [
"azurerm_sql_database.db",
"azurerm_storage_account.sa",
"azurerm_application_insights.app_ins"]
}
data "aws_route53_zone" "domain" {
zone_id = "${var.zone_id_aws}"
private_zone = true
}
resource "aws_route53_record" "aws-route" {
zone_id = "${data.aws_route53_zone.domain.zone_id}"
name = "${var.dns_app_aws}.${data.aws_route53_zone.domain.name}"
type = "${var.type_aws}"
ttl = "${var.ttl_aws}"
records = [
"${local.url_app}.azurewebsites.net"]
}
resource "azurerm_app_service_custom_hostname_binding" "binding_app" {
hostname = "${var.dns_app_aws}.${var.domain_biz_aws}"
app_service_name = "${azurerm_app_service.app.name}"
resource_group_name = "${azurerm_resource_group.rg.name}"
depends_on = [
"aws_route53_record.aws-route"]
}
resource "azurerm_app_service_slot" "app_slot" {
name = "slot"
app_service_name = "${azurerm_app_service.app.name}"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
app_service_plan_id = "${azurerm_app_service_plan.sp.id}"
site_config {
dotnet_framework_version = "v4.0"
scm_type = "LocalGit"
always_on = true
}
app_settings = "${merge(
map("APPINSIGHTS_INSTRUMENTATIONKEY",local.instrumentation_key_app),
map("automationManagerJsonExecutionsContainer",local.json_executions_container),
map("automationManagerAppInsightsInstrumentationKey",local.app_insights_instrumentation_key),
map("automationManagerJsonTemplatesContainer",local.json_templates_container),
map("automationManagerStorageStringConnection",local.storage_string_connection),
map("automationManagerKeyVaultBaseUrl",local.key_vault_base_url_slot),
map("automationManagerProductInstanceQueueName",local.queue_name_run_baseline_client_slot),
map("automationManagerDBbackupsContainer",local.db_backups_container),
map("automationManagerClientSecret",local.client_secret),
map("automationManagerClientId",local.client_id),
map("automationManagerBizagiDBTemplateStorage",local.bizagi_database_template),
var.app_services_slot_settings)}"
connection_string {
name = "DefaultDatabase"
type = "SQLServer"
value = "${local.connection_string_slot}"
}
connection_string {
name = "AzureWebJobsDashboard"
type = "SQLServer"
value = "${local.connection_string_storage}"
}
connection_string {
name = "AzureWebJobsStorage"
type = "SQLServer"
value = "${local.connection_string_storage}"
}
depends_on = [
"azurerm_sql_database.db_slot","azurerm_key_vault.kv_slot"]
}
resource "aws_route53_record" "aws-route-slot" {
zone_id = "${data.aws_route53_zone.domain.zone_id}"
name = "${var.dns_app_aws}slot.${data.aws_route53_zone.domain.name}"
type = "${var.type_aws}"
ttl = "${var.ttl_aws}"
records = [
"${local.url_app}-slot.${local.azure_domain}"]
depends_on = [
"azurerm_app_service_slot.app_slot"]
}
data "template_file" "ssl_binding" {
template = "${file("ssl_binding.json")}"
vars {
service_plan_id = "${azurerm_app_service_plan.sp.id}"
app_service_name = "${azurerm_app_service.app.name}/${var.dns_app_aws}.${var.domain_biz_aws}"
app_service_slot_name = "${azurerm_app_service.app.name}/slot/${var.dns_app_aws}slot.${var.domain_biz_aws}"
key_vault_id = "${var.key_vault_id}"
}
}
resource "azurerm_template_deployment" "ssl_binding" {
name = "${var.location_g}-app-service-binding-${var.channel_g}"
resource_group_name = "${azurerm_resource_group.rg.name}"
deployment_mode = "Incremental"
template_body = "${data.template_file.ssl_binding.rendered}"
depends_on = [
"azurerm_app_service_slot.app_slot",
"azurerm_app_service.app",
"aws_route53_record.aws-route",
"aws_route53_record.aws-route-slot"]
}
resource "azurerm_storage_account" "sa" {
name = "${random_id.sa.hex}"
resource_group_name = "${azurerm_resource_group.rg.name}"
location = "${azurerm_resource_group.rg.location}"
account_tier = "Standard"
account_replication_type = "${var.account_replication_type}"
}
resource "azurerm_storage_container" "assets_sa" {
name = "${var.container_assets}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
container_access_type = "private"
}
resource "azurerm_storage_container" "dbbackups_sa" {
name = "${var.container_dbbackups}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
container_access_type = "private"
}
resource "azurerm_storage_container" "jsonexecutions_sa" {
name = "${var.container_jsonexecutions}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
container_access_type = "private"
}
resource "azurerm_storage_container" "jsontemplates_sa" {
name = "${var.container_jsontemplates}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
container_access_type = "private"
}
resource "azurerm_storage_queue" "queuerunclient_sa" {
name = "${var.automationManagerProductInstanceQueueName}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuerunclient_sa_slot" {
name = "${var.automationManagerProductInstanceQueueName_slot}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuepaastrial_sa" {
name = "${var.product_instance_bizagi_paas_trial}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuepaastrial_sa_slot" {
name = "${var.product_instance_bizagi_paas_trial_slot}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queueinstancedebug_sa" {
name = "${var.product_instance_queue_debug}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queueinstancedebug_sa_slot" {
name = "${var.product_instance_queue_debug_slot}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuerunbaseclient_sa" {
name = "${var.run_baseline_client}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuerunbaseclient_sa_slot" {
name = "${var.run_baseline_client_slot}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_application_insights" "app_ins" {
name = "${var.location_g}-ins-${var.name_prefix_g}-${var.channel_g}"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
application_type = "Web"
}
resource "azurerm_key_vault" "kv" {
name = "${var.location_g}-kv-rm-${var.channel_g}"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
sku {
name = "standard"
}
tenant_id = "${var.credential["tenant_id"]}"
access_policy {
tenant_id = "${var.credential["tenant_id"]}"
object_id = "${var.credential["object_id"]}"
key_permissions = [
"backup",
"create",
"decrypt",
"delete",
"encrypt",
"get",
"import",
"list",
"purge",
"recover",
"restore",
"sign",
"unwrapKey",
"update",
"verify",
"wrapKey"
]
secret_permissions = [
"backup",
"delete",
"get",
"list",
"purge",
"recover",
"restore",
"set"
]
}
access_policy {
tenant_id = "${var.credential["tenant_id"]}"
object_id = "${var.microsoft_web_objectid}"
key_permissions = [
"backup",
"create",
"decrypt",
"delete",
"encrypt",
"get",
"import",
"list",
"purge",
"recover",
"restore",
"sign",
"unwrapKey",
"update",
"verify",
"wrapKey"
]
secret_permissions = [
"backup",
"delete",
"get",
"list",
"purge",
"recover",
"restore",
"set"
]
}
enabled_for_disk_encryption = true
}
resource "azurerm_key_vault_secret" "secret_01" {
name = "automationManagerAmazonAccessKey"
value = "${var.automationManagerAmazonAccessKey}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_02" {
name = "automationManagerAmazonSecretKey"
value = "${var.automationManagerAmazonSecretKey}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_03" {
name = "automationManagerSmtpPassword"
value = "${var.automationManagerSmtpPassword}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_04" {
name = "bizagiGatewayToken"
value = "${var.bizagiGatewayToken}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_05" {
name = "certificateClientId"
value = "${local.client_id}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_06" {
name = "certificateClientSecret"
value = "${local.client_secret}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_07" {
name = "automationManagerBizagiHostZoneId"
value = "${var.automationManagerBizagiHostZoneId}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_08" {
name = "releaseManagementStorageStringConnection"
value = "${var.releaseManagementStorageStringConnection}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault" "kv_slot" {
name = "${var.location_g}-kv-rm-${var.channel_g}-slot"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
sku {
name = "standard"
}
tenant_id = "${var.credential["tenant_id"]}"
access_policy {
tenant_id = "${var.credential["tenant_id"]}"
object_id = "${var.credential["object_id"]}"
key_permissions = [
"backup",
"create",
"decrypt",
"delete",
"encrypt",
"get",
"import",
"list",
"purge",
"recover",
"restore",
"sign",
"unwrapKey",
"update",
"verify",
"wrapKey"
]
secret_permissions = [
"backup",
"delete",
"get",
"list",
"purge",
"recover",
"restore",
"set"
]
}
access_policy {
tenant_id = "${var.credential["tenant_id"]}"
object_id = "${var.microsoft_web_objectid}"
key_permissions = [
"backup",
"create",
"decrypt",
"delete",
"encrypt",
"get",
"import",
"list",
"purge",
"recover",
"restore",
"sign",
"unwrapKey",
"update",
"verify",
"wrapKey"
]
secret_permissions = [
"backup",
"delete",
"get",
"list",
"purge",
"recover",
"restore",
"set"
]
}
enabled_for_disk_encryption = true
}
resource "azurerm_key_vault_secret" "secret_01_slot" {
name = "automationManagerAmazonAccessKey"
value = "${var.automationManagerAmazonAccessKey}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_02_slot" {
name = "automationManagerAmazonSecretKey"
value = "${var.automationManagerAmazonSecretKey}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_03_slot" {
name = "automationManagerSmtpPassword"
value = "${var.automationManagerSmtpPassword}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_04_slot" {
name = "bizagiGatewayToken"
value = "${var.bizagiGatewayTokenSlot}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_05_slot" {
name = "certificateClientId"
value = "${local.client_id}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_06_slot" {
name = "certificateClientSecret"
value = "${local.client_secret}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_07_slot" {
name = "automationManagerBizagiHostZoneId"
value = "${var.automationManagerBizagiHostZoneId}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_08_slot" {
name = "releaseManagementStorageStringConnection"
value = "${var.releaseManagementStorageStringConnection}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
terraform {
backend "azurerm" {}
}
output "app_service_name" {
value = "${azurerm_app_service.app.name}"
depends_on = [
"azurerm_app_service.app.name"]
}
output "app_service_slot_name" {
value = "${azurerm_app_service_slot.app_slot.name}"
depends_on = [
"azurerm_app_service_slot.app_slot.name"]
}
output "key_vault_name" {
value = "${azurerm_key_vault.kv.name}"
depends_on = [
"azurerm_key_vault.kv"]
}
output "key_vault_name_slot" {
value = "${azurerm_key_vault.kv_slot.name}"
depends_on = [
"azurerm_key_vault.kv_slot"]
}
output "server_db_name" {
value = "${azurerm_sql_server.sdb.name}"
depends_on = [
"azurerm_sql_server.sdb"]
}
output "database_db_name" {
value = "${azurerm_sql_database.db.name}"
depends_on = [
"azurerm_sql_database.db"]
}
output "database_db_slot_name" {
value = "${azurerm_sql_database.db_slot.name}"
depends_on = [
"azurerm_sql_database.db_slot"]
}
output "connection_string_appservice" {
value = "Server=tcp:${azurerm_sql_server.sdb.fully_qualified_domain_name},1433;Initial Catalog=${azurerm_sql_database.db.name};Persist Security Info=False;User ID=${azurerm_sql_server.sdb.administrator_login};Password=${azurerm_sql_server.sdb.administrator_login_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
depends_on = [
"azurerm_sql_database.db"]
}
output "connection_string_base" {
value = "jdbc:sqlserver://${azurerm_sql_server.sdb.fully_qualified_domain_name}:1433;database=${azurerm_sql_database.db.name};"
depends_on = [
"azurerm_sql_database.db"]
}
output "connection_string_slot" {
value = "jdbc:sqlserver://${azurerm_sql_server.sdb.fully_qualified_domain_name}:1433;database=${azurerm_sql_database.db_slot.name};"
depends_on = [
"azurerm_sql_database.db_slot"]
}
output "user_db_base" {
value = "${azurerm_sql_server.sdb.administrator_login}"
depends_on = [
"azurerm_sql_database.db"]
}
output "password_db_base" {
value = "${azurerm_sql_server.sdb.administrator_login_password}"
depends_on = [
"azurerm_sql_database.db"]
}
output "instrumentation_key_app" {
value = "${azurerm_application_insights.app_ins.instrumentation_key}"
}
output "storage_account_name" {
value = "${azurerm_storage_account.sa.name}"
}
output "storage_account_key" {
value = "${azurerm_storage_account.sa.primary_access_key}"
}
output "resource_group_name" {
value = "${azurerm_resource_group.rg.name}"
}
output "app_slot_name" {
value = "${azurerm_app_service_slot.app_slot.name}"
}
935 lines
Terraform - Modulos
2
resource "azurerm_resource_group" "rg" {
name = "${var.location}-rg-${var.prefix_rs}-${var.channel_g}"
location = "${var.location}"
}
locals {
local_kv_secrets="${merge(
map("certificateClientId",var.credential["client_id"]),
map("certificateClientSecret",var.credential["client_secret"]),
var.kv_secrets)}"
local_kv_secrets_slot="${merge(
map("certificateClientId",var.credential["client_id"]),
map("certificateClientSecret",var.credential["client_secret"]),
var.kv_secrets_slot)}"
local_policy_object="${concat(
list(var.credential["object_id"]),
list(var.microsoft_web_objectid),
var.policy_object)}"
local_app_setings="${merge(
map("automationManagerStorageStringConnection",module.rb-storage-account-basic.sa_connection),
map("automationManagerKeyVaultBaseUrl",module.rb-key-vault-basic.kv_url_base),
map("automationManagerClientSecret",var.credential["client_secret"]),
map("automationManagerClientId",var.credential["client_id"]),
var.app_settings)}"
local_app_setings_slot="${merge(
map("automationManagerStorageStringConnection",module.rb-storage-account-basic.sa_connection),
map("automationManagerKeyVaultBaseUrl",module.rb-key-vault-basic-slot.kv_url_base),
map("automationManagerClientSecret",var.credential["client_secret"]),
map("automationManagerClientId",var.credential["client_id"]),
var.app_settings_slot)}"
local_db_connection_app_base={
name = "DefaultDatabase"
type = "SQLServer"
value = "${module.rb-server-database-basic.db_connection_app_base}"
}
local_db_connection_app_slot={
name = "DefaultDatabase"
type = "SQLServer"
value = "${module.rb-server-database-basic.db_connection_app_slot}"
}
local_db_connection_sa_02={
name = "AzureWebJobsDashboard"
type = "SQLServer"
value = "${module.rb-storage-account-basic.sa_connection}"
}
local_db_connection_sa_03={
name = "AzureWebJobsStorage"
type = "SQLServer"
value = "${module.rb-storage-account-basic.sa_connection}"
}
}
module "rb-key-vault-basic" {
source="git::https://github.com/bizagiengineering/terraform-modules.git//key-vault-basic"
prefix_rs="${var.prefix_rs}"
channel_g="${var.channel_g}"
location="${var.location}"
rg_name="${azurerm_resource_group.rg.name}"
credential="${var.credential}"
kv_secrets="${local.local_kv_secrets}"
kv_sku = "${var.kv_sku}"
policy_object="${local.local_policy_object}"
}
module "rb-key-vault-basic-slot" {
source="git::https://github.com/bizagiengineering/terraform-modules.git//key-vault-basic"
prefix_rs="${var.prefix_rs}"
channel_g="${var.channel_g}-slot"
location="${var.location}"
rg_name="${azurerm_resource_group.rg.name}"
credential="${var.credential}"
kv_secrets="${local.local_kv_secrets_slot}"
kv_sku = "${var.kv_sku}"
policy_object="${local.local_policy_object}"
}
module "rb-server-database-basic" {
source="git::https://github.com/bizagiengineering/terraform-modules.git//server-database-basic"
prefix_rs="${var.prefix_rs}"
channel_g="${var.channel_g}"
rg_name="${azurerm_resource_group.rg.name}"
location="${var.location}"
db_user="${var.db_user}"
db_password="${var.db_password}"
db_size="${var.db_size}"
db_size_slot="${var.db_size_slot}"
sdb_firewall_ips="${var.sdb_firewall_ips}"
}
module "rb-storage-account-basic" {
source = "git::https://github.com/bizagiengineering/terraform-modules.git//storage-account-basic"
prefix_rs = "${var.prefix_rs}"
channel_g = "${var.channel_g}"
location = "${var.location}"
rg_name = "${azurerm_resource_group.rg.name}"
sa_tier = "${var.sa_tier}"
sa_replication_type = "${var.sa_replication_type}"
sa_containers="${var.sa_containers}"
sa_queues="${var.sa_queues}"
sa_tables="${var.sa_tables}"
}
module "rb-webapp-basic" {
source="git::https://github.com/bizagiengineering/terraform-modules.git//webapp-basic"
rg_name="${azurerm_resource_group.rg.name}"
prefix_rs="${var.prefix_rs}"
channel_g="${var.channel_g}"
location="${var.location}"
sp_tier="${var.sp_tier}"
sp_size="${var.sp_size}"
app_tls_version="${var.app_min_tls_version}"
app_settings="${local.local_app_setings}"
app_settings_slot = "${local.local_app_setings_slot}"
connection_01="${local.local_db_connection_app_base}"
connection_02="${local.local_db_connection_sa_02}"
connection_03="${local.local_db_connection_sa_03}"
connection_slot_01="${local.local_db_connection_app_slot}"
connection_slot_02="${local.local_db_connection_sa_02}"
connection_slot_03="${local.local_db_connection_sa_03}"
}
module "rb-dns_binding" {
source = "git::https://github.com/bizagiengineering/terraform-modules.git//dns-binding"
prefix_rs = "${var.prefix_rs}"
channel_g = "${var.channel_g}"
location = "${var.location}"
rg_name = "${azurerm_resource_group.rg.name}"
aws_zone_id="${var.aws_zone_id}"
app_dns="${var.app_dns}"
aws_ttl="${var.aws_ttl}"
aws_type="${var.aws_type}"
app_url="${module.rb-webapp-basic.app_name}"
aws_domain_bizagi="${var.aws_domain_bizagi}"
app_name="${module.rb-webapp-basic.app_name}"
app_name_slot="${module.rb-webapp-basic.app_slot_name}"
key_vault_id="${var.key_vault_id}"
sp_id="${module.rb-webapp-basic.sp_id}"
}
data "template_file" "ssl_binding" {
template = "${file("ssl_binding.json")}"
vars {
service_plan_id = "${module.rb-webapp-basic.sp_id}"
app_service_name = "${module.rb-webapp-basic.app_name}/${var.app_dns}.${var.aws_domain_bizagi}"
app_service_slot_name = "${module.rb-webapp-basic.app_name}/slot/${var.app_dns}slot.${var.aws_domain_bizagi}"
key_vault_id = "${var.key_vault_id}"
}
}
resource "azurerm_template_deployment" "ssl_binding" {
name = "${var.location}-app-service-binding-${var.channel_g}"
resource_group_name = "${azurerm_resource_group.rg.name}"
deployment_mode = "Incremental"
template_body = "${data.template_file.ssl_binding.rendered}"
depends_on = ["module.rb-webapp-basic"]
}
terraform {
backend "azurerm" {}
}162 lines
935 lines
Terraform - Modulos
2
resource "azurerm_storage_account" "sa" {
name = "${random_id.sa.hex}"
resource_group_name = "${azurerm_resource_group.rg.name}"
location = "${azurerm_resource_group.rg.location}"
account_tier = "Standard"
account_replication_type = "${var.account_replication_type}"
}
resource "azurerm_storage_container" "assets_sa" {
name = "${var.container_assets}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
container_access_type = "private"
}
resource "azurerm_storage_container" "dbbackups_sa" {
name = "${var.container_dbbackups}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
container_access_type = "private"
}
resource "azurerm_storage_container" "jsonexecutions_sa" {
name = "${var.container_jsonexecutions}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
container_access_type = "private"
}
resource "azurerm_storage_container" "jsontemplates_sa" {
name = "${var.container_jsontemplates}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
container_access_type = "private"
}
resource "azurerm_storage_queue" "queuerunclient_sa" {
name = "${var.automationManagerProductInstanceQueueName}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuerunclient_sa_slot" {
name = "${var.automationManagerProductInstanceQueueName_slot}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuepaastrial_sa" {
name = "${var.product_instance_bizagi_paas_trial}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuepaastrial_sa_slot" {
name = "${var.product_instance_bizagi_paas_trial_slot}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queueinstancedebug_sa" {
name = "${var.product_instance_queue_debug}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queueinstancedebug_sa_slot" {
name = "${var.product_instance_queue_debug_slot}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuerunbaseclient_sa" {
name = "${var.run_baseline_client}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_storage_queue" "queuerunbaseclient_sa_slot" {
name = "${var.run_baseline_client_slot}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_name = "${azurerm_storage_account.sa.name}"
}
resource "azurerm_application_insights" "app_ins" {
name = "${var.location_g}-ins-${var.name_prefix_g}-${var.channel_g}"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
application_type = "Web"
}
resource "azurerm_key_vault" "kv" {
name = "${var.location_g}-kv-rm-${var.channel_g}"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
sku {
name = "standard"
}
tenant_id = "${var.credential["tenant_id"]}"
access_policy {
tenant_id = "${var.credential["tenant_id"]}"
object_id = "${var.credential["object_id"]}"
key_permissions = [
"backup",
"create",
"decrypt",
"delete",
"encrypt",
"get",
"import",
"list",
"purge",
"recover",
"restore",
"sign",
"unwrapKey",
"update",
"verify",
"wrapKey"
]
secret_permissions = [
"backup",
"delete",
"get",
"list",
"purge",
"recover",
"restore",
"set"
]
}
access_policy {
tenant_id = "${var.credential["tenant_id"]}"
object_id = "${var.microsoft_web_objectid}"
key_permissions = [
"backup",
"create",
"decrypt",
"delete",
"encrypt",
"get",
"import",
"list",
"purge",
"recover",
"restore",
"sign",
"unwrapKey",
"update",
"verify",
"wrapKey"
]
secret_permissions = [
"backup",
"delete",
"get",
"list",
"purge",
"recover",
"restore",
"set"
]
}
enabled_for_disk_encryption = true
}
resource "azurerm_key_vault_secret" "secret_01" {
name = "automationManagerAmazonAccessKey"
value = "${var.automationManagerAmazonAccessKey}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_02" {
name = "automationManagerAmazonSecretKey"
value = "${var.automationManagerAmazonSecretKey}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_03" {
name = "automationManagerSmtpPassword"
value = "${var.automationManagerSmtpPassword}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_04" {
name = "bizagiGatewayToken"
value = "${var.bizagiGatewayToken}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_05" {
name = "certificateClientId"
value = "${local.client_id}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_06" {
name = "certificateClientSecret"
value = "${local.client_secret}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_07" {
name = "automationManagerBizagiHostZoneId"
value = "${var.automationManagerBizagiHostZoneId}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_08" {
name = "releaseManagementStorageStringConnection"
value = "${var.releaseManagementStorageStringConnection}"
vault_uri = "${azurerm_key_vault.kv.vault_uri}"
}
resource "azurerm_key_vault" "kv_slot" {
name = "${var.location_g}-kv-rm-${var.channel_g}-slot"
location = "${azurerm_resource_group.rg.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
sku {
name = "standard"
}
tenant_id = "${var.credential["tenant_id"]}"
access_policy {
tenant_id = "${var.credential["tenant_id"]}"
object_id = "${var.credential["object_id"]}"
key_permissions = [
"backup",
"create",
"decrypt",
"delete",
"encrypt",
"get",
"import",
"list",
"purge",
"recover",
"restore",
"sign",
"unwrapKey",
"update",
"verify",
"wrapKey"
]
secret_permissions = [
"backup",
"delete",
"get",
"list",
"purge",
"recover",
"restore",
"set"
]
}
access_policy {
tenant_id = "${var.credential["tenant_id"]}"
object_id = "${var.microsoft_web_objectid}"
key_permissions = [
"backup",
"create",
"decrypt",
"delete",
"encrypt",
"get",
"import",
"list",
"purge",
"recover",
"restore",
"sign",
"unwrapKey",
"update",
"verify",
"wrapKey"
]
secret_permissions = [
"backup",
"delete",
"get",
"list",
"purge",
"recover",
"restore",
"set"
]
}
enabled_for_disk_encryption = true
}
resource "azurerm_key_vault_secret" "secret_01_slot" {
name = "automationManagerAmazonAccessKey"
value = "${var.automationManagerAmazonAccessKey}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_02_slot" {
name = "automationManagerAmazonSecretKey"
value = "${var.automationManagerAmazonSecretKey}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_03_slot" {
name = "automationManagerSmtpPassword"
value = "${var.automationManagerSmtpPassword}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_04_slot" {
name = "bizagiGatewayToken"
value = "${var.bizagiGatewayTokenSlot}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_05_slot" {
name = "certificateClientId"
value = "${local.client_id}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_06_slot" {
name = "certificateClientSecret"
value = "${local.client_secret}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_07_slot" {
name = "automationManagerBizagiHostZoneId"
value = "${var.automationManagerBizagiHostZoneId}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_secret" "secret_08_slot" {
name = "releaseManagementStorageStringConnection"
value = "${var.releaseManagementStorageStringConnection}"
vault_uri = "${azurerm_key_vault.kv_slot.vault_uri}"
}
resource "azurerm_key_vault_access_policy" "kv_policy" {
count = "${length(var.policy_object)}"
key_vault_id = "${azurerm_key_vault.kv.id}"
tenant_id = "${var.credential["tenant_id"]}"
object_id = "${element(var.policy_object,count.index%length(var.policy_object))}"
key_permissions = "${var.key_permissions}"
secret_permissions = "${var.secret_permissions}"
certificate_permissions = "${var.certificate_permissions}"
depends_on = ["azurerm_key_vault.kv"]
}
resource "azurerm_key_vault_secret" "kv_secret" {
count = "${length(keys(var.kv_secrets))}"
name = "${element(keys(var.kv_secrets), count.index)}"
value = "${element(values(var.kv_secrets), count.index)}"
key_vault_id = "${azurerm_key_vault.kv.id}"
depends_on = ["azurerm_key_vault.kv","azurerm_key_vault_access_policy.kv_policy"]
}Terraform - Terratest
2
Libreria que permite escribir pruebas para el codigo de infrastructura.
Packer, Docker images, terraform...etc
Pre-requisitos: GO
package test
import (
"testing"
"github.com/gruntwork-io/terratest/modules/terraform"
"github.com/stretchr/testify/assert"
)
func TestWebAppBasic(t *testing.T) {
t.Parallel()
expected_rg_name := "eastus-rg-ops-dev"
expected_web_app_name := "eastus-app-ops-dev"
terraformOptions := &terraform.Options{
TerraformDir: "modules/web-app",
Vars: map[string]interface{}{
"rg_name":"opstest",
"prefix_rs":"ops",
"channel_g":"dev",
"location":"eastus",
"sp_tier":"Standard",
"sp_size":"S1",
"app_tls_version": "1.0",
"subscription_id": "jojojo",
"client_id" : "oooo",
"client_secret" : "joojo,
"tenant_id" : "jkjkj",
},
}
defer terraform.Destroy(t, terraformOptions)
terraform.InitAndApply(t, terraformOptions)
actualText := terraform.Output(t, terraformOptions, "rg_name")
assert.Equal(t, expected_rg_name, actualText)
actualText2 := terraform.Output(t, terraformOptions, "app_name")
assert.Equal(t, expected_web_app_name, actualText2)
}Init
Plan
Apply
Destroy
Liquibase
3
Liquibase es un librería Open Source (licencia Apache 2.0), que nos permite realizar el seguimiento, gestión y aplicación de cambios en el modelo de datos
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
<changeSet author="automation-devops" id="1">
<sqlFile dbms="mssql"
encoding="utf8"
endDelimiter="\nGO"
path="scripts/01-DLL-AutomationManager.sql"
relativeToChangelogFile="true"
splitStatements="true"
stripComments="false"/>
</changeSet>
<changeSet author="automation-devops" id="2">
<sqlFile dbms="mssql"
encoding="utf8"
endDelimiter="\nGO"
path="scripts/02-TRIGGERS-AutomationManager.sql"
relativeToChangelogFile="true"
splitStatements="true"
stripComments="false"/>
</changeSet>
<changeSet author="automation-devops" id="3">
<sqlFile dbms="mssql"
encoding="utf8"
endDelimiter="\nGO"
path="scripts/03-DML-AutomationManager.sql"
relativeToChangelogFile="true"
splitStatements="true"
stripComments="false"/>
</changeSet>
<changeSet author="automation-devops" id="4">
<sqlFile dbms="mssql"
encoding="utf8"
endDelimiter="\nGO"
path="scripts/04-General-DML-AutomationManager.sql"
relativeToChangelogFile="true"
splitStatements="true"
stripComments="false"/>
</changeSet>
</databaseChangeLog>DatabaseChangeLog
Id
author
filename
dateexecuted
MD5SUM
1
automation-devops
/tmp/run/qa/changelog.xml
2018-11-03 00:43:06
7:c8fd3f67e78addbfe89bd41f3131f330
Python
Ejecuta task de Liquibase
herramienta de automatización de la construcción
Opcion 2: Servicios de actualizacion de BD
ejemplo: platform
Deploy
4
Idempotente
Version manager
jar
deployment
1
latest
deploy table
2
latest
slot
Integration test
5
BDD
Behaviour Driver Development
Verificar comportamiento código
BDD es un proceso de desarrollo de software que trata de combinar los aspectos técnicos y los de negocio, de manera que tengamos un marco de trabajo, y un marco de pruebas, en el que los requisitos de negocio formen parte del proceso de desarrollo
Integration test
5
BDD
Gherkin
lenguaje comprensible por humanos y por ordenadores, con el que se desbribe las funcionalidades, definiendo el comportamiento del software, sin entrar en su implementación
Feature: Rebase Automation
Rebase automation allows the process of rebase the cloud products.
The tasks of execution are creation of infrastructure, management operations with databases,
deployment of applications, execution of integration tests and other operations.
Rebase automation allows
Scenario Outline:
Given we have the first execution for the product <product> in channel <channel> and credentials <credentials>
When rebase automation is executed
And the resource group with name <name_rg> is created
Then execution result should be <status>
And resource group with name <name_rg>
And it should create the webapp with name <name_app>
And database with name <name_db>
And database server with name <name_dbs>
And location value is <location>
And <setting01> value is <value_setting01>
#And connection database is not null
Examples: Products
| product |channel | credentials | name_app | name_db | name_dbs | name_rg | status | location | setting01 | value_setting01 |
| modules |qa |CLOUDDEVOPSREBASEATUTOMATION | eastus-app-devopstest-qa | eastus-sdb-devopstest-qa/devopstest-db-qa | eastus-sdb-devopstest-qa | eastus-devopstest-rg-qa | SUCCESS | East US | setting01 | bizagi.com. |
Scenario Outline:
Given we have the first execution for the product <product> in channel <channel> and credentials <credentials>
When rebase automation is executed
Then se ejecutan los script base en el slot y el resultado debe ser <status>
Examples: Products
| product |channel | credentials | status |
| modules |qa | CLOUDDEVOPSREBASEATUTOMATION | EXECUTED |
Integration test
5
Python
Behave
NodeJS
Cucumber
JUnit
BDD
Lenguajes
Frameworks BDD
Reportes
Script
Frameworks BDD
RA. Publicar
Swap
5
Idempotente
Version manager
jar
deployment
1
latest
Swap table
2
slot
site
Calidad Rebase Automation
Logs Jenkins-Azure Devops
Jenkins
Jenkins y los nodos se crean automaticamente
Pruebas de integracion de VM y Nodos
Migracion de Cloud
Backup Jenkins
Compromiso de equipos
Preguntas