Estoy configurando acciones de Github para un repositorio de proyectos.
El flujo de trabajo consta de los siguientes pasos:
- Construyendo una imagen acoplable
- Empujar la imagen a un registro de contenedor
- Implementar una implementación de Kubernetes.
Sin embargo, tengo dos implementaciones diferentes de Kubernetes: una para desarrollo y otra para producción. Por lo tanto, también tengo dos flujos de trabajo de Github Action.
El flujo de trabajo de Github Action para el desarrollo se activa cada vez que se empuja una confirmación:
on:
push:
branches:
- master
Pero no quiero eso para mi flujo de trabajo de producción. Necesitaría un disparador manual, como un botón Enviar a producción . No vi nada parecido a eso en los documentos.
¿Hay alguna manera de activar un flujo de trabajo manualmente en las acciones de Github?
¿Cómo puedo dividir mis flujos de trabajo de desarrollo y producción para lograr lo que quiero, ya sea en Github Actions, Docker o Kubernetes?
fuente
repository_dispatch
un lado, se puede combinarwatch
con elif: github.actor == 'hackerman'
de filtrar extraños al azar. O mejor aún,if: github.actor == github.event.repository.owner.login
para "seguridad" adicional: DActualización : para una solución de estilo de comando de barra "ChatOps", vea la acción barra-comando-despacho . Esto puede permitirle desencadenar flujos de trabajo con comandos de barra diagonal (p
/deploy
. Ej. ) A partir de problemas y comentarios de solicitud de extracción.Aquí hay un ejemplo básico para un
deploy
comando de barra diagonal.REPO_ACCESS_TOKEN
es un token de acceso personal conrepo
alcanceEl comando se puede procesar en este flujo de trabajo.
Hay muchas más opciones y diferentes configuraciones. Consulte slash-command-dispatch para obtener instrucciones de uso completas.
Respuesta original :
repository_dispatch
una llamada a la API de GitHub puede activar manualmente un flujo de trabajo de la siguiente manera.[username]
es un nombre de usuario de GitHub[token]
es un token de acceso personal conrepo
alcance[repository]
es el nombre del repositorio en el que reside el flujo de trabajo.fuente
event_type
está disponible para el flujo de trabajogithub.event.action
, por lo que los trabajos / pasos específicos se pueden habilitar / deshabilitar cuando sea necesario. PD: PAT no es realmente necesario, comenzar curl con-u "[username]:[password]"
o incluso-u "[username]"
funciona también (en el segundo caso curl solicita al usuario la contraseña); más fácil de usar en algunos casos (por ejemplo, al escribir scripts que toman como nombre de usuario como entrada, o scripts destinados a ser utilizados por usuarios menos expertos en tecnología).Aunque la publicación de Sarah fue la respuesta más cercana y más simple a la pregunta original, es algo hacky, por lo que finalmente terminamos creando una
dev
rama para usar los siguientes desencadenantes:Flujo de trabajo de desarrollo: se activa cuando se realiza un empuje en la
dev
rama:Flujo de trabajo de producción: se activa cuando se realiza una solicitud / fusión de extracción
dev
paramaster
:fuente
Editado para más detalles / explicación.
Una cosa que puedes hacer es llamar
repository_dispatch
. Puede ver la documentación de GitHub para usarrepository_dispatch
aquí .Por ejemplo, si tiene un flujo de trabajo de acciones de GitHub que se ve así:
Puede crear un evento de despacho de repositorio siguiendo los pasos que se explican en la documentación de la API de GitHub v3 .
Primero, cree un token de acceso personal (PAT) en GitHub para la autenticación.
Entonces, puedes correr
curl
así:Al mismo tiempo, también quería compartir un pequeño proyecto en el que he estado trabajando con un amigo que resuelve este problema exacto.
https://www.actionspanel.app/
ActionsPanel usa esta misma
repository_dispatch
API pero lo hace con un token de aplicación GitHub para que no tenga que preocuparse por administrar su propia PAT. Esto también hace que sea mucho más fácil activar tus acciones en equipos con varias personas.En función de las solicitudes y comentarios de los usuarios, hemos incorporado funciones para especificar a qué rama enviar el envío
repository_dispatch
, e incluso hemos creado una forma de inyectar parámetros cuando desea ejecutar la acción.Configura sus botones con un archivo declarativo yaml que deja en el repositorio, y ActionsPanel leerá ese archivo y creará dinámicamente su UI para que active sus acciones.
fuente
Otra forma de resolver esto con la oferta actual de Github Action es crear una
production
rama desde el maestro cuando se necesita una implementación y activar la acción de implementación en laproduction
rama. Laproduction
rama es esencialmente un espejo de lamaster
.Las construcciones / push de desarrollo pueden ocurrir siempre que haya un compromiso con el maestro.
En algún momento del cronograma de lanzamiento, puede elevar el PR a la
production
sucursal. Esto se encargará de la compilación / implementación de productos.fuente