Integración de apps

1. Antes de comenzar

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una string de caracteres que no se utiliza en las API de Google y se puede actualizar en cualquier momento.
  • El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). Cloud Console genera automáticamente una string única, que, por lo general, no importa cuál sea. En la mayoría de los codelabs, debes hacer referencia al ID del proyecto (suele ser PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio o prueba con uno propio y comprueba si está disponible. Después de crear el proyecto, este ID se “congela” y no se puede cambiar.
  • Además, hay un tercer valor, el Número de proyecto, que usan algunas API. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en Cloud Console para usar las API o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Si quieres cerrar los recursos para no se te facture más allá de este instructivo, sigue las instrucciones de “limpieza” que se encuentran al final del codelab. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

2. Prepara tu espacio de trabajo

  1. Visita la siguiente URL para abrir el editor de Cloud Shell

https://ide.cloud.google.com

  1. Asegúrate de que el nombre del proyecto esté configurado en la CLI.

gcloud config set project {{project-id}}

export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

  1. Habilita las APIs

gcloud services enable \

cloudbuild.googleapis.com \

secretmanager.googleapis.com

  1. Otorga derechos a CloudDeploy

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.admin ${PROJECT_ID}

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/container.developer ${PROJECT_ID}

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/iam.serviceAccountUser ${PROJECT_ID}

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.jobRunner ${PROJECT_ID}

  1. En la ventana de la terminal, clona el código fuente de la aplicación con el siguiente comando:

git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git

  1. Cambia al directorio y configura el espacio de trabajo del IDE en la raíz del repo

cd software-delivery-workshop && rm -rf .git

cd delivery-platform && cloudshell workspace .

3. Utiliza plantillas de apps personalizadas y predefinidas

Los desarrolladores deben poder elegir entre un conjunto de plantillas que se usan comúnmente dentro de la organización. El proceso de incorporación creará un conjunto centralizado de repositorios de plantillas almacenados en tu cuenta de GitHub. En pasos posteriores, estos repositorios de plantillas se copiarán y modificarán para usarse como base de aplicaciones nuevas. En este lab, inicializarás tu repositorio de plantillas con una estructura de muestra que se proporciona aquí. Puedes agregar tus propias plantillas agregando carpetas adicionales modeladas según la muestra.

En este paso, crearás tu propio repositorio para almacenar plantillas de apps a partir de los archivos de ejemplo proporcionados. Se proporciona una secuencia de comandos auxiliar para simplificar las interacciones con GitHub.

Estos son pasos únicos que se usan para completar tus repositorios de plantillas. En los pasos futuros, se volverán a usar estos repositorios.

Configura el acceso a GitHub

En los pasos de este instructivo, se llama a la API de GitHub para crear y configurar repositorios. Tu nombre de usuario de GitHub y un token de acceso personal son necesarios en varios puntos que se indican a continuación. La siguiente secuencia de comandos te ayudará a adquirir los valores y almacenarlos como variables locales para su uso posterior.

source ./onboard-env.sh

echo Git Username: $GIT_USERNAME

echo Git Base URL: $GIT_BASE_URL

Crea un repositorio de plantillas de apps

Junto con este lab, se proporcionan plantillas de aplicaciones de ejemplo como una muestra de cómo podrías integrar tus propias plantillas básicas. En este paso, crearás tu propia copia de estos archivos en un repositorio llamado mcd-app-templates en tu cuenta de GitHub.

  1. Copia la plantilla en el directorio de trabajo

cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR

cd $WORK_DIR/app-templates

  1. Crea un repositorio remoto vacío en tu cuenta de GitHub

$BASE_DIR/scripts/git/gh.sh create mcd-app-templates

  1. Envía el repositorio de plantillas a tu repositorio remoto

git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"

git remote add origin $GIT_BASE_URL/mcd-app-templates

git push origin main

  1. Limpia el directorio de trabajo

cd $BASE_DIR

rm -rf $WORK_DIR/app-templates

Crea un repositorio de configuraciones básicas compartidas

En este instructivo, se usa una herramienta llamada Kustomize que utiliza archivos de configuración base compartidos por varios equipos y, luego, superpone parámetros de configuración específicos de la aplicación. Esto permite que los equipos de la plataforma se expandan a muchos equipos y entornos.

En este paso, crearás el repositorio de configuración compartido llamado mcd-shared_kustomize a partir de las muestras proporcionadas.

  1. Copia la plantilla en el directorio de trabajo

cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR

cd $WORK_DIR/shared-kustomize

  1. Crea un repositorio remoto vacío en tu cuenta de GitHub

$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize

  1. Envía el repositorio de plantillas a tu repositorio remoto

git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"

git remote add origin $GIT_BASE_URL/mcd-shared_kustomize

git push origin main

  1. Limpia el directorio de trabajo

cd $BASE_DIR

rm -rf $WORK_DIR/shared-kustomize

Una vez que hayas creado los repositorios de plantillas, podrás usarlos para crear una instancia de la app.

4. Cómo crear una instancia nueva de una aplicación

Crear una aplicación nueva a partir de una plantilla suele requerir que las variables de marcador de posición se reemplacen por valores reales en varios archivos de la estructura de la plantilla. Una vez que se complete la sustitución, se creará un repositorio nuevo para la nueva instancia de la app. Los desarrolladores clonarán este repositorio de instancias de la app y trabajarán con él en su desarrollo diario.

En este paso, sustituirás valores en una plantilla de app y publicarás los archivos resultantes en un repositorio nuevo.

Define un nombre para la aplicación nueva

export APP_NAME=my-app

Recupera el repositorio de plantillas de Golang

cd $WORK_DIR/

git clone -b main $GIT_BASE_URL/mcd-app-templates app-templates

rm -rf app-templates/.git

cd app-templates/golang

Sustituye los valores de marcador de posición

Una de las necesidades más comunes para la incorporación es intercambiar variables en plantillas por instancias reales que se usan en la aplicación. Por ejemplo, proporcionar el nombre de la aplicación El siguiente comando crea instancias de todos los archivos .tmpl con los valores almacenados en las variables de entorno.

for template in $(find . -name '*.tmpl'); do envsubst < ${template} > ${template%.*}; done

Crea un repo nuevo y almacena los archivos actualizados

  1. Crea un repositorio remoto vacío en tu cuenta de GitHub

$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}

  1. Envía el repositorio de plantillas a tu repositorio remoto

git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"

git remote add origin $GIT_BASE_URL/${APP_NAME}

git push origin main

Ahora que se creó la instancia de la app, es momento de implementar compilaciones continuas.

5. Configura la ejecución de la canalización automatizada

La parte central de un sistema de integración continua es la capacidad de ejecutar la lógica de la canalización en función de los eventos que se originan en el sistema de control de código fuente. Cuando un desarrollador confirma código en su repositorio, se activan eventos que se pueden configurar para activar procesos en otros sistemas.

En este paso, configurarás GitHub para que llame a Google Cloud Build y ejecute tu canalización cada vez que los usuarios confirmen o etiqueten código en su repositorio.

Habilita el acceso seguro

Necesitarás 2 elementos para configurar el acceso seguro a tu canalización de aplicaciones. Una clave de API y un secreto únicos para la canalización.

Clave de API

La clave de API se usa para identificar al cliente que llama a una API determinada. En este caso, el cliente será GitHub. Una práctica recomendada que no se aborda aquí es bloquear el alcance de la clave de API solo para las APIs específicas a las que accederá el cliente. Creaste la clave en un paso anterior.

  1. Para revisar la clave, haz clic en este vínculo.
  2. Para asegurarte de que el valor esté configurado, ejecuta el siguiente comando:

echo $API_KEY_VALUE

Secret de canalización

Los secretos se usan para autorizar a un llamador y garantizar que tenga derechos para el trabajo de destino de compilación en la nube específico. Es posible que tengas 2 repositorios diferentes en GitHub que solo deberían tener acceso a sus propias canalizaciones. Si bien API_KEY limita las APIs que puede utilizar GitHub (en este caso, se llama a la API de Cloud Build), el secreto limita qué trabajo de la API de Cloud Build puede ejecutar el cliente.

  1. Define el nombre, la ubicación y el valor del secreto

SECRET_NAME=${APP_NAME}-webhook-trigger-cd-secret

SECRET_PATH=projects/${PROJECT_NUMBER}/secrets/${SECRET_NAME}/versions/1

SECRET_VALUE=$(sed "s/[^a-zA-Z0-9]//g" <<< $(openssl rand -base64 15))

  1. Crea el secreto

printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-

  1. Permite que Cloud Build lea el secreto

gcloud secrets add-iam-policy-binding ${SECRET_NAME} \

--member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com \

--role='roles/secretmanager.secretAccessor'

Crea un activador de Cloud Build

El activador de Cloud Build es la configuración que ejecutará los procesos de CICD.

El trabajo requiere que se proporcionen algunos valores clave en el momento de la creación para configurar correctamente el activador.

  1. Define el nombre del activador y dónde se puede encontrar el archivo de configuración

export TRIGGER_NAME=${APP_NAME}-clouddeploy-webhook-trigger

export BUILD_YAML_PATH=$WORK_DIR/app-templates/golang/build/cloudbuild-cd.yaml

  1. Define la ubicación del repo de configuración base compartido.

export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize

  1. Se estableció una variable en la secuencia de comandos onboard-env.sh que define el registro de contenedores del proyecto. Revisa el valor con el siguiente comando.

echo $IMAGE_REPO

  1. Crea un activador de webhook de Cloud Build con las variables creadas anteriormente. La ubicación del repo de la aplicación se extrae del cuerpo de la solicitud de GitHub. Un valor a continuación hace referencia a la ruta de acceso en el cuerpo de la solicitud donde se encuentragcloud alpha builds triggers create webhook \
     `--name=${TRIGGER_NAME} \`
    
     `--substitutions='_APP_NAME='${APP_NAME}',_APP_REPO=$(body.repository.git_url),_CONFIG_REPO='${GIT_BASE_URL}'/'${CLUSTER_CONFIG_REPO}',_DEFAULT_IMAGE_REPO='${IMAGE_REPO}',_KUSTOMIZE_REPO='${GIT_BASE_URL}'/'${SHARED_KUSTOMIZE_REPO}',_REF=$(body.ref)' \`
    
     `--inline-config=$BUILD_YAML_PATH \`
    
     `--secret=${SECRET_PATH}`
    
  2. Revisa el activador de Cloud Build recién creado en la consola visitando este vínculo.
  3. Define una variable para la URL del extremo, que GitHub usará en el siguiente paso.

WEBHOOK_URL="https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY_VALUE}&secret=${SECRET_VALUE}"

Configura el webhook de GitHub

  1. Configura el webhook en GitHub

$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL

  1. Ve al repo de la aplicación y revisa el webhook recién configurado

REPO_URL=${GIT_BASE_URL}/${APP_NAME}/settings/hooks

echo $REPO_URL

Ahora que realizaste manualmente todos los pasos necesarios para crear una aplicación nueva, es momento de automatizarla en una secuencia de comandos.

6. Automatizar todos los pasos de incorporación

En la práctica, no es factible ejecutar cada uno de los pasos anteriores para cada aplicación nueva. En su lugar, la lógica debe incorporarse en una secuencia de comandos para facilitar la ejecución. Los pasos anteriores ya se incluyeron en un script para que lo uses.

En este paso, usarás la secuencia de comandos proporcionada para crear una aplicación nueva.

Crear una nueva aplicación

  1. Asegúrate de estar en el directorio correcto

cd $BASE_DIR

  1. Crear una nueva aplicación

export APP_NAME=demo-app

./app.sh create ${APP_NAME}

Todos los pasos se ejecutan automáticamente.

Revisa el repositorio de GitHub

En este punto, podrás revisar el nuevo repositorio en GitHub.

  1. Recupera la URL del repositorio de GitHub ejecutando el siguiente comando:

echo ${GIT_BASE_URL}/demo-app

  1. Abre la URL con tu navegador web para revisar la nueva aplicación.
  2. Toma nota de los ejemplos en los que las variables de plantilla se reemplazaron por valores de instancia, como se muestra en la URL a continuación.

echo ${GIT_BASE_URL}/demo-app/blob/main/k8s/prod/deployment.yaml#L24

  1. Revisa el webhook configurado en la siguiente URL

echo ${GIT_BASE_URL}/demo-app/settings/hooks

Revisa el activador de Cloud Build

El activador se configuró automáticamente con la secuencia de comandos.

  1. Revisa el activador de Cloud Build en la consola visitando este vínculo.
  2. Revisa el historial de compilaciones en esta página.