¿Cómo puede un submodule commit in git desencadenar una compilation en continuous integration?

Estoy trabajando en el proyecto A, y A depende de un proyecto B de rápido desarrollo (su twig principal).

Por lo tanto, B es un submodule de A, cada vez que construyo A, B también se reconstruye. Además, cada vez que B tiene un nuevo compromiso, necesito build B y luego rebuild A. (Afortunadamente, los proyectos son lo suficientemente pequeños, por lo que el time de compilation no es importante).

Ahora, aquí está el punto. Quiero activar una nueva compilation en Travis CI u otros services de continuous integration, cuando hay una nueva confirmación en el proyecto A o B.

Acabo de probar Github & Travis CI. Un compromiso en el proyecto B no desencadenaría una construcción en el proyecto A. ¿Existe una manera simple de ejecutar una integración tan continua?

Un compromiso en el proyecto B no desencadenaría una construcción en el proyecto A

Eso se espera, considerando que B no tiene idea de que A existe.

Debería registrar el nuevo estado de B (nuevo gitlink , input especial en el índice ) del proyecto A haciendo:

 cd /path/to/projectA git submodule update --remote git add . git commit -m "Record new B SHA1 gitlink" git push 

git submodule update --remote actualizará el submodule B a la última confirmación de la twig registrada en el file A .gitmodules para B.
Vea " git submodule tracking latest " y " Git submodules: Specify a branch / tag "

Entonces se generaría una nueva construcción de Travis para A.

Si desea automatizar la secuencia descrita anteriormente, necesitaría un webhook (GitHub) ( o BitBucket ) para projectB, y un oyente local que, en un evento push en el repository B, activaría los commands mencionados anteriormente en un repository local de proyecto A.

Basado en la pregunta de @VonC, resolví este problema. Ref https://developer.github.com/webhooks/configuring/

  1. Configuré Project Monitor, que tiene dos submodules, proyecto A y B
  2. Crear file trigger.rb en Project Monitor

requiere 'sinatra'

 post '/payload' do system("git submodule update --remote") system("git add .") system("git commit -m Record_new_change") system("git push") puts "Finished handling" end 
  1. Descarga ngrok , ejecútalo en un VPS o un commpuer de larga ejecución con ./ngrok http 4567 . Puede get un enlace como http://7e9ea9dc.ngrok.io
  2. Ejecutar ruby trigger.rb
  3. Tenedor proyecto B a B ', escriba otro script para asegurarse de que todas las confirmaciones se sincronizan con el proyecto B'
  4. Vaya a la página de configuration del proyecto, cree un nuevo webhook, cuya url es http://7e9ea9dc.ngrok.io/payload para el proyecto A y B '
  5. Agregar proyecto Monitor a Travis CI

De esta forma, el desarrollo para A y B permanece intacto, y las nuevas comstackciones pueden activarse automáticamente.