Saltar al contenido

SpainClouds |

Portada » Blogs » Acciones de Github: cómo enviar código a GCP Cloud Run

Acciones de Github: cómo enviar código a GCP Cloud Run

La implementación de código en producción requiere mucho tiempo y es un proceso delicado. Hacer las cosas mal podría reducir su servicio y eventualmente dañar a sus usuarios y costarle dinero.

La solución, por supuesto, es automatizar tanto como sea posible.

FYI: la publicación del blog asume conocimientos básicos en node.js / docker, una cuenta GCP con permisos para implementar código y crear cuentas de servicio y una cuenta github.

¿Qué es GCP Cloud run?

En el espíritu de los servicios gestionados, Google Cloud nos proporciona un servicio llamado Cloud Run.

Cloud Run es una plataforma informática totalmente administrada que escala automáticamente sus contenedores sin estado

¿Qué podemos entender de esa oración?

  1. Cloud Run es un servicio administrado
  2. Cloud Run es para ejecutar contenedores
  3. Se escala automáticamente
  4. Está diseñado para servicios sin estado

Así que, básicamente, cualquier persona que necesite ejecutar contenedores puede beneficiarse del uso de Cloud Run.

¡Queremos correr contenedores!

Podemos envolver nuestro código en un contenedor, por ejemplo, acoplador, empujarlo al registro de contenedores de GCP (u otro registro si lo deseamos) y usar la herramienta cli de gcloud para implementarlo en la nube o hacer algunas actualizaciones desde el sitio web de la consola de GCP.

Pero, ese es un proceso repetitivo, es propenso a errores humanos y consume tiempo. Una maravillosa oportunidad para la automatización.

Hay muchas herramientas de CI / CD en el mercado, en esta publicación nos centraremos en el tipo de acciones Github nuevas

¿Qué son las acciones Github?

GitHub Actions facilita la automatización de todos sus flujos de trabajo de software, ahora con CI / CD de clase mundial. Cree, pruebe e implemente su código directamente desde GitHub Las

acciones de Github nos brindan la capacidad de automatizar procesos, para que podamos programar lo que queremos hacer y saber que se repite exactamente cuando lo necesitamos.

Una acción es básicamente un archivo yaml que describe una serie de instrucciones (llamadas pasos). Cada paso puede ser otra acción. No voy a profundizar más, la documentación se puede encontrar aquí https://help.github.com/en/actions/getting-started-with-github-actions/core-concepts-for-github-actions

Un punto clave es: Github proporciona el mercado de una acción, lo que significa que probablemente no lo haremos tenemos que inventar la rueda a menos que estemos haciendo cosas realmente innovadoras. El mercado se puede encontrar aquí: https://github.com/marketplace?type=actions

Muy bien, ¿Cuál es el plan?

Vamos a seguir los siguientes pasos:

  1. Crear un nuevo Github repo
  2. Crear un servidor super simple Node.js
  3. Crear el juego Dockerfile para que podamos containerize el servidor
  4. Crear Github yaml acción para construir realmente el contenedor y desplegar para que se ejecutenube
  5. Crear unacuenta de
  6. servicio Otorgue poderes a la cuenta de servicio para actuar
  7. Actualice los secretos de Github
  8. Confirme el código y vea cómo ocurre la magia

El código completo se puede encontrar aquí: https://github.com/efiShtain/github-action-cloud-run

Cree un nuevo repositorio de Github

Si ya tiene un repositorio en el que está trabajando, omita este paso. De lo contrario, vaya a Github.com, inicie sesión en su cuenta y cree un nuevo repositorio, asígnele el nombre que desee yen su unidad

clóneloCree un servidor node.js súper simple

Ejecute los siguientes comandos en el directorio de repositorios:

// Inicialice un paquete

npm npm init -y // cree el directorio del archivo fuente

mkdir src // cree el archivo de punto de entrada del servidor de aplicaciones

toque src / index.js // vi a src / index.js o edítelo como desee y agregue el siguiente código a itconst http = require (‘http’); función requestHandler (req, res) {

   res.write (‘ok’);

   res.end ();

} servidor const = http.createServer (requestHandler);

const port = process.env.PORT || 8888;

server.listen (port, () => console.log (`escuchando en el puerto $ {port}`));

Cree el Dockerfile correspondiente

// cree el archivo docker

toque Dockerfile // Agregue las siguientes líneas al Dockerfile

DESDE nodo: alpine

WORKDIR / usr / app / src

COPY package * .json ./RUN npm install –productionCOPY src .CMD [«node «,» index.js «]

Cree la acción de Github yaml para construir realmente el contenedor e implementarlo en la nube.

Vaya a:

GoogleCloudPlatform / github-actions

Una colección de acciones de GitHub para interactuar con Google Cloud Platform. – GoogleCloudPlatform / github-actions

github.com

Este es el ejemplo oficial de Google Cloud Platform para ejecutar acciones en la nube. Cree exactamente el mismo archivo en su repositorio local en .github / workflows / cloud-run.yml

No profundizaremos en la estructura del archivo, concentrémonos solo en algunos puntos:

PROJECT_ID: $ {{secrets.RUN_PROJECT}}

Eso es la identificación del proyecto que vamos a usar en gcp. Para encontrar la identificación de su proyecto, vaya a https://console.cloud.google.com/. Inicie sesión si es necesario y abra la lista de proyectos desde el menú superior izquierdo. En la ventana modal, verá la lista de sus proyectos, sus nombres e identificadores.

RUN_REGION: us-central1  

SERVICE_NAME: helloworld-nodejs

Puede controlar el nombre del servicio y la región que ejecutará.

service_account_email: $ {{secrets.SA_EMAIL}} service_account_key: $ {{secrets.GOOGLE_APPLICATION_CREDENTIALS}}

Necesitamos proporcionar una cuenta de servicio y credenciales para que github pueda controlar nuestro proyecto GCP.

¡ESTO ES MUY PELIGROSO E IMPORTANTE! RESTRINGIR TANTO ACCESO COMO ES POSIBLE DE CUALQUIER CUENTA DE SERVICIO Revise

el archivo si desea ver el resto de las cosas que están sucediendo, pero es bastante básico y hace exactamente lo que describimos en la parte del manual.

Cree una cuenta de servicio y actualice los secretos de github

Vaya a la consola de su proyecto GCP-> IAM y Admin-> Cuenta de servicio (https://console.cloud.google.com/iam-admin/serviceaccounts)

Cree una cuenta de servicio y actualice los secretos de github

Haga clic en Crear cuenta de servicio de

crear un serviciocuenta

de llenadoa nombre de cuenta de servicio, es decir, github-acción, y unaDescripción

github

acción y la descripción

Haga clic en Crear, y continuar y hecho en las dos pantallas siguientes. Ahora debería ver su cuenta de servicio creada con éxito.

cuenta de servicio

Si recuerda, teníamos tres secretos en el archivo cloud-run.yml:

secrets.RUN_PROJECET

secrets.GOOGLE_APPLICATION_CREDENTIALS

secrets.SA_EMAIL

El SA_EMAIL es: github-action@…iam.gserviceaccount.com

Para obtener GOOGLE_APPLICATION_CREDENTIALS, haga clic en GOOGLE_APPLICATION_CREDENTIALS, haga clic en menú del botón derecho y seleccione crearclave

GOOGLE_APPLICATION_CREDENTIALS

La siguiente ventana se mostrará:

clave privada

Hacerseguro que dejar JSON seleccionado y haga clic en crear. Se descargará un archivo JSON en su computadora. Cualquiera que tenga ese archivo tiene los permisos de la cuenta de servicio para hacer lo que quiera. manténgalo seguro, seguramente no como parte de su repositorio.

El último paso es basar el contenido del archivo JSON en 64. En una Mac, puede usar lo siguiente en la terminal:

cat {PATH_TO_DOWNLOADED_JSON_FILE} | base64

Guarde el resultado, lo usaremos pronto.

Asegúrese de que la cuenta de servicio pueda hacer lo que debe hacer.

Nuestra cuenta de servicio no tiene valor en este momento, no tiene roles y no puede hacer nada. Vamos a darle algunos poderes.

Vaya a las páginas de IAM, haga clic en Agregar y escriba el nombre de la cuenta de servicio que acabamos de crear en el campo «nuevo miembro»; debería completarse automáticamente. Añadir las siguientes funciones a la cuenta de

servicio:

Service cuenta

  1. Constructor Cloud- permitir la cuenta de servicio para construir y presentar imágenes
  2. de servicio de usuario de cuenta – permiten que la cuenta de servicio para actuar como el servicio de
  3. la nube de ejecución admin – permitir que el servicio de implementar y comenzar contenedores
  4. Visor en el proyecto: permita que la cuenta de servicio enumere los objetos de almacenamiento y los use (aquí es donde se almacenan los datos de nuestro contenedor)

Actualice los secretos de Github Muy

bien, hemos terminado con GCP, abra su repositorio en el sitio web de Github. Vaya a la configuración y seleccione la pestaña secreta

Secretos

Agregue 3 secretos al repositorio:

RUN_PROJECT – identificación del proyecto

GOOGLE_APPLICATION_CREDENTIALS – credenciales de la cuenta de servicio, en formato base64

SA_EMAIL – el correo electrónico de la cuenta de servicio Confirme el

código y vea cómo sucede la magia ¡

Eso es todo! estamos completamente listos! puede confirmar su código y dejar que github haga el trabajo. Vaya a la página de acciones, allí verá lo que está sucediendo. Aquí hay un ejemplo de algunos de mis juegos usando acciones de github.

Los flujos de trabajo

Conclusión

Esta era una especie de un proceso largo, pero sólo tiene que hacerlo una vez, y yo tratamos de describir las partes duras en los detalles.

Ahora tiene una acción Github totalmente funcional que implementa un contenedor de ejecución en la nube y oculta todas las delicadas tareas repetitivas para que pueda concentrarse en la codificación.

Dicho esto, esto solo está tocando la punta de hielo. Esta solución no está totalmente preparada para la producción, ya que hay más cosas a considerar, como fallas de manejo, retrocesos, pruebas canarias, pruebas unitarias, etc.

Avíseme si he cometido algún error o si puede pensar en una forma mejor / más fácil de hacer lo mismo

https://itnext.io/github-actions-ship-code-to-gcp-cloud-run-8d607f34e1cd