Si define su infraestructura como código, ¿no debería la automatización de su flujo de trabajo utilizar el mismo enfoque como código? Así es como funciona Flowpipe. Defina flujos de trabajo con HCL (lenguaje de configuración de HashiCorp) y luego ejecútelos utilizando un único binario que implemente localmente, en la nube o en cualquier canal de CI/CD. Flowpipe incorpora los mismos ingredientes arquitectónicos que encontrará en cualquier herramienta de flujo de trabajo: canalizaciones, pasos, desencadenadores, flujo de control. Y se integra con todo lo que esperarías de una herramienta de esta categoría. Pero esto no es ClickOps. No utiliza una herramienta de diagramación para crear integraciones. Las definiciones de canalizaciones son artefactos de código que viven en repositorios como ciudadanos de primera clase del ecosistema de software moderno: controlados por versiones y colaborativos. Estas canalizaciones pueden orquestar flujos de trabajo utilizando una variedad de métodos. ¿Necesita realizar un seguimiento de los problemas abiertos en GitHub y luego notificar a Slack? Hay más de una forma de recopilar los datos de GitHub que enviarás a Slack: en un paso de canalización. Utilice la canalización list_issues de la biblioteca GitHub, que encapsula un paso http que llama a la API de GitHub. En un paso de consulta. Utilice el complemento GitHub de Steampipe para consultar problemas abiertos en un repositorio. En un paso de función. Escriba una función compatible con AWS-Lambda, en Python o JavaScript, para llamar a la API de GitHub. En un paso de contenedor, empaquete la CLI de GitHub en un contenedor y ejecute gh issues list de esa manera. ¿Por qué todas estas opciones? El viejo mantra de Perl «Hay más de una forma de hacerlo» también se aplica aquí. Flowpipe es una encarnación moderna de la «cinta adhesiva para Internet»: un kit flexible lleno de herramientas útiles que funcionan bien juntas. Para cualquier integración determinada, elija las más apropiadas en ese contexto, las que aprovechen los activos existentes o las que sean más convenientes. Nunca estás bloqueado. Siempre hay una manera de hacer el trabajo mientras navega por un panorama complejo de nubes y servicios diversos e interconectados. ¡Muéstreme el código! Aquí hay cuatro formas de recopilar información sobre problemas de GitHub. Enumere los problemas de GitHub utilizando las bibliotecas GitHub y Slack de Flowpipe. Los mods de Flowpipe proporcionan Tuberías reutilizables. En este caso, hay modificaciones de biblioteca que admiten ambas operaciones necesarias: enumerar problemas de GitHub y notificar a Slack. Entonces podemos usar esas bibliotecas en un par de pasos de canalización. canalización «list_open_issues_and_notify_slack» { paso «pipeline» «list_issues» { canalización = github.pipeline.list_issues # use el mod args de la biblioteca github = { issues_state: «OPEN» repository_owner: «rodaballo» repository_name: «steampipe» } } paso «pipeline» «notify_slack» { pipeline = slack.pipeline.post_message # use el mod slack de github args = { token = var.slack_token canal = var.slack_channel message = step.pipeline.list_issues.value } } La documentación para las listas de mods de GitHub y Slack tuberías disponibles y, para cada tubería, los parámetros requeridos y opcionales. Es sencillo usar mods de Flowpipe publicados, e igualmente sencillo crear y usar los tuyos propios. Enumere los problemas de GitHub usando el complemento GitHub de Steampipe. Flowpipe no requiere Steampipe, pero lo aceptará felizmente. Si eres capaz de usar ambos juntos, obtendrás un poder inmenso. El complemento de GitHub es solo uno de los muchos contenedores para un creciente ecosistema de fuentes de datos, cada uno modelado como tablas que puede consultar con SQL en un paso de consulta. canalización «list_open_issues_and_notify_slack» { paso «consulta» «query_list_issues» { cadena_conexión = «postgres://steampipe@localhost:9193/steampipe» sql = <['owner']
repositorio = evento['repo']
url = f"https://api.github.com/repos/{owner}/{repo}/issues?state=closed" respuesta = request.get(url) return { 'problemas': respuesta.json() } Estas funciones, que puede escribir en Python o JavaScript, son compatibles con las funciones de AWS Lambda: controladas por eventos, sin estado y de corta duración. Y en comparación con las funciones de AWS Lambda, son mucho más fáciles de escribir y probar. Incluso puedes editar tus funciones en vivo porque cuando realizas cambios, Flowpipe los detecta y aplica automáticamente. Enumere los problemas de GitHub utilizando la CLI de GitHub. Las interfaces de línea de comandos son herramientas fundamentales para la integración de DevOps. Puede empaquetar una CLI en un contenedor y usarla en un contenedor step.pipeline "list_open_issues_and_notify_slack" { step "container" "list_issues" { image = "my-gh-image" cmd = ["/container-list-issues.sh"]
env = { GITHUB_TOKEN = var.access_token GH_COMMAND = var.gh_command } } Probablemente sea excesivo en este caso, pero la capacidad de usar comandos en contenedores de esta manera garantiza la máxima flexibilidad y portabilidad. ¿Por qué el lenguaje de configuración de HashiCorp? El lenguaje de configuración de HashCorp (HCL) es , en primer lugar, familiar para los profesionales de Devops que lo utilizan para expresar configuraciones de Terraform. Pero el lenguaje también resulta ideal para el flujo de trabajo. El gráfico acíclico dirigido (DAG) en el núcleo de su modelo de ejecución determina el orden de las operaciones en función de las dependencias de recursos, a diferencia de muchos lenguajes de programación donde dichas dependencias deben administrarse explícitamente. Si el segundo paso en un flujo de trabajo se refiere al resultado del primero paso, Flowpipe implícitamente secuencia los pasos. La concurrencia también está implícita. Los pasos del flujo de trabajo que no dependen de otros pasos se ejecutan automáticamente en paralelo, sin necesidad de sintaxis especial. De esta forma, puede crear flujos de trabajo complejos y altamente paralelos en un estilo declarativo que sea fácil de leer y escribir. Por ejemplo, aquí hay un paso que itera sobre una lista de usuarios y utiliza un paso http para llamar a una API para cada usuario. paso "http" "add_a_user" { for_each = ["Jerry", "Elaine", "Newman"]
url = "https://myapi.local/api/v1/user" método = "post" request_body = jsonencode({ user_name = "${each.value}" }) } Porque las cosas no siempre salen según lo planeado , el estilo declarativo de Flowpipe se extiende al manejo de errores y a los reintentos. paso "http" "my_request" { url = "https://myapi.local/subscribe" método = "post" cuerpo = jsonencode({ nombre = param.subscriber }) reintentar { max_attempts = 5 estrategia = "exponencial" min_interval = 100 max_interval = 10000 } } Normalmente necesitarás descomprimir los resultados de un paso en una canalización y luego transformar los datos para enviarlos al siguiente paso. Entre las funciones HCL compatibles con Terraform admitidas por Flowpipe se encuentran funciones de recopilación que funcionan con listas y mapas.pipeline "get_astronauts" { step "http" "whos_in_space" { url = "http://api.open-notify.org/astros" método = "obtener" } salida "método_1" { valor = [for o in step.http.whos_in_space.response_body.people: po.name]
} salida "método_2" { valor = paso.http.whos_in_space.response_body.people[*].name } } Aquí está el resultado del comando flowpipe pipeline run get_astronauts. IDG Los dos métodos son formas equivalentes de iterar sobre la lista de mapas devueltos por la API y extraer el campo de nombre de cada uno. El primer método utiliza la expresión versátil que puede funcionar con listas, conjuntos, tuplas, mapas y objetos. El segundo método proporciona un resultado idéntico utilizando la expresión splat, que puede simplificar el acceso a los campos dentro de elementos de listas, conjuntos y tuplas. Programaciones, eventos y activadores Al igual que con otros motores de flujo de trabajo, puede activar una canalización Flowpipe en un proceso definido por cron. Schedule.trigger "schedule" "daily_3pm" { Schedule = "* 15 * * *" pipeline = pipeline.daily_task } Pero también querrás reaccionar inmediatamente a eventos como envíos de código, cambios de infraestructura o mensajes de Slack. Por lo tanto, Flowpipe proporciona un disparador basado en HTTP para reaccionar a un webhook entrante ejecutando un pipeline.trigger "http" "my_webhook" { pipeline = pipeline.my_pipeline args = { event = self.request_body } } Para usar disparadores, ejecute Flowpipe en el servidor modo.La zona GoldilocksFlowpipe ocupa un término medio entre herramientas como Zapier o IFTTT, que requieren poco o ningún código para cosas simples, y herramientas como N8N o Windmill, que pueden hacer cosas complejas pero requieren mucho código. Usted expresa canalizaciones, pasos y desencadenantes en el lenguaje de configuración estándar de Devops: HCL. Según sea necesario, aumenta ese código con SQL, Python, JavaScript, bash o cualquier cosa que pueda empaquetar en un contenedor. Coordina todos esos recursos utilizando un modelo de ejecución común integrado en un único binario que se ejecuta como una CLI, y/ o como servidor que programa tareas y escucha webhooks. De cualquier manera, puede ejecutar ese único binario localmente o implementarlo en cualquier nube o canal de CI/CD. Para comenzar, descargue la herramienta, consulte las modificaciones y ejemplos de la biblioteca y ejecute el tutorial. Estilo de código declarativo de avance de Will Flowpipe ¿Resuena con los scripters de Devops? Pruébalo y cuéntanos cómo te va. Y si está dispuesto a contribuir con el motor con licencia AGPL de Flowpipe o con los mods con licencia Apache, ¡siempre estaremos encantados de recibir solicitudes de extracción! Copyright © 2024 IDG Communications, Inc.
Source link
Deja una respuesta