github - tutorial - travis deploy
Cómo configurar Travis-CI para crear solicitudes de extracción y fusiones para dominar sin redundancia (5)
Para ponerlo en términos "BDD":
Fondo:
Dado que estoy contribuyendo a un repositorio de GH
Cuando creo una solicitud de extracción
Entonces Travis debería construir el último commitCuando presiono a una solicitud de extracción existente
Entonces Travis debería construir el último commitCuando fusiono una solicitud de extracción para dominar
Entonces Travis debería construir maestro
Estaba confundido por la configuración de "empujar compilación" y "compilación de relaciones públicas" de Travis-CI, como:
-
Habilitar ambos hace que cada solicitud de extracción sea construida dos veces por Travis
- una vez por el compromiso en esa rama
- y una vez más para la fusión comprometer esa rama en su destino
- Habilitar solo "construir PR" hace que se generen PR, pero no da como resultado compilaciones posteriores a la fusión (es decir, en el maestro).
- Habilitar los "empujes" de fuerza bruta satisface los criterios anteriores al generar todos los empujes al repositorio. Puede tratar de arreglar las cosas mediante ramas de listas blancas y negras, pero eso probablemente lo morderá a menos que sea rigurosamente disciplinado con los nombres de las ramas.
Esto se explica más en los documentos de Travis-CI y GH número 3241 .
¿Alguien conoce una configuración que satisfaga los criterios anteriores?
Acabo de encontrar en travis docs
Añadir a .travis.yml
if: type = push
alternativamente:
if: type = pull_request
El enfoque de la lista blanca descrito en la respuesta aceptada tiene algunas limitaciones significativas. En particular, no admite la creación de ramas arbitrarias sin redundancia sin abrir un RP.
Eventualmente encontré otro problema de GH ( #2111 ) que me dio la idea de intentar habilitar los RP y los push, pero con una lista blanca para restringir los push a una rama específica. Esto parece satisfacer los criterios para mi flujo de trabajo. Esto es lo que hice:
- Habilite ambos PRs y ramificaciones en la configuración de Travis para el repositorio:
-
Cambie
.travis.yml
a la ramamaster
lista blanca (es decir, solo.travis.yml
empujes a maestro):
branches: only: - master
-
.travis.yml
creando un RP con el cambio.travis.yml
, y otro RP con algunas confirmaciones vacías para verificar que también funcione para las bifurcaciones . -
Verifique la compilación de confirmación de fusión exitosa desde el maestro .
Puede usar el siguiente flujo de trabajo si desea probar no solo la rama
master
sino también algunas otras ramas:
- Mantenga ambos "Build push" y "Build pull request" ON
-
Agregue
branches:except
directiva a su.travis.yml
:branches: except: - /^pr/..*/
En esta configuración:
-
cualquier compromiso con la
feature-A
ramafeature-A
desencadenará la compilación -
cualquier commit a branch
pr.feature-A
no activará la compilación -
si se
pr.feature-A
ramapr.feature-A
en la solicitud de extracción abierta, se generará la compilación
Ejemplo de flujo de trabajo
-
rama WIP temporal compartida entre varios desarrolladores:
wip.feature-A
, cualquier compromiso con esta rama activará la compilación -
cuando la rama está lista para fusionarse con
master
, puede cambiarle el nombre dewip.feature-A
apr.feature-A
y abrir la solicitud de extracción -
si al revisar la solicitud de extracción desea aplicar nuevas correcciones, simplemente presione para
pr.feature-A
En todos los pasos anteriores, solo se activará una compilación.
Suponiendo que desea construir
todos los
RP, algo como lo siguiente hará el truco.
Habilite las compilaciones de sucursales y relaciones públicas en la página de configuración, y ponga esta línea como la primera línea en su
travis.yml
:
if: (type = push AND branch IN (master, dev)) OR (type = pull_request AND NOT branch =~ /no-ci/)
Esto intentará una acumulación de empuje en todos los empujes y una construcción de relaciones públicas en todos los empujes a un PR abierto, pero filtrará los que no cumplan la condición. Es posible que deba modificar esto un poco: la cláusula sobre no construir ramas con no-ci en algún lugar de su nombre es obviamente opcional, y es posible que no tenga dos ramas en las que siempre desee ejecutar compilaciones.
Puede leer más sobre conditions y compilaciones condicionales en el sitio de Travis.