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?
- Cloud Run es un servicio administrado
- Cloud Run es para ejecutar contenedores
- Se escala automáticamente
- 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:
- Crear un nuevo Github repo
- Crear un servidor super simple Node.js
- Crear el juego Dockerfile para que podamos containerize el servidor
- Crear Github yaml acción para construir realmente el contenedor y desplegar para que se ejecutenube
- Crear unacuenta de
- servicio Otorgue poderes a la cuenta de servicio para actuar
- Actualice los secretos de Github
- 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
- Constructor Cloud- permitir la cuenta de servicio para construir y presentar imágenes
- de servicio de usuario de cuenta – permiten que la cuenta de servicio para actuar como el servicio de
- la nube de ejecución admin – permitir que el servicio de implementar y comenzar contenedores
- 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