2015-03-12 9 views
5

Nella nostra azienda abbiamo potenti server di compilazione basati su linux (doppio Xeon con 40 core) e laptop win7 non così potenti. Costruiamo il nostro prodotto in linguaggio C/C++ per una CPU esoterica. Il compilatore esiste solo in Linux. Posso modificare il mio repository git con Qt Creator. Funziona e abbastanza veloce e tutto. Ma non posso costruire la fonte sul nostro laptop. Abbiamo un repository git principale e posso clonare lo stesso repository sul mio laptop e sul nostro server di build. Voglio farlo quando premo il pulsante di costruzione il mio codice si basa magicamente sul build server. Ho fatto una soluzione proof of concept in cui il mio script di build fa un git diff sul mio repository e lo scp al server di build che ssh to build server applica quel diff sul server repo di start e attendi la compilazione. Ma questa soluzione non è così infallibile. Penso che esista un metodo/approccio migliore. Quindi, come posso costruire il mio repository git su un server esterno?Come posso creare il mio repository git locale su un server esterno?

+0

Un metodo comune è quello di avere un hook di post-ricezione su un repo del server, si preme su quel repository e fa un checkout e guida la build. – jthill

+0

Indipendentemente dal modo in cui riesci a far generare al tuo build i tuoi sorgenti, non sarebbe ancora meglio avere un feedback prima di commetterli? C'è forse un cross-compilatore che gira sul tuo laptop? – flup

risposta

4

Se si può spingere ad un bare repo sul server di build, allora si può associare a quella nuda repo un post-receive hook (.git/hooks/post-receive) che sarà:

  • checkout il codice

    #!/bin/sh 
    git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f 
    
  • attiva la compilation.

In questo modo, non è necessario gestire il diff te stesso.
È sufficiente associare al pulsante di generazione l'azione per spingere il ramo al repository bare del server di generazione e il gancio di post-ricezione farà il resto.

+0

Controlla il codice da un semplice repository? –

+0

@ Antidepressivo industriale è l'idea: il repository nudo ti permette di spingerlo, ma dal repository nudo puoi eseguire il checkout del suo contenuto su un albero funzionante che si trova dove vuoi, e usare quell'albero di lavoro per la costruzione. – VonC

+0

Ci proverò, mi sta bene. Non sapevo di poter controllare un repository nudo in una directory di lavoro. –

2

È possibile passare a un forking Workflow, in cui ogni sviluppatore dell'azienda ha un repository pubblico personale, che è un fork del repository centrale ufficiale.

Quindi, quando si desidera creare le modifiche, si spinge a (un ramo o il master di) il proprio repository pubblico personale.

Il server di build non solo clona il repository centrale ufficiale, ma anche il repository pubblico. Quindi, quando si esegue il push sul proprio repo pubblico, il server di build unisce le modifiche e crea una build personale per te. Proprio come probabilmente già fa per il repository centrale ufficiale?

Si noti che questo non è troppo diverso dalla risposta di @VonC, si concentra un po 'di più sul flusso di lavoro. Il repository pubblico personale potrebbe essere sul server di build, come suggerisce @VonC. O potrebbe essere da qualche altra parte. Fintanto che è un luogo abbastanza pubblico che il server di build e tu e i tuoi colleghi potete trovarlo.

+0

Sembra interessante per me, giocherò sicuramente con questo approccio. –

2

Considerare l'integrazione di http://jenkins-ci.org/ nel proprio flusso di lavoro, per gestire il processo di compilazione, utilizzando un "hook git post-ricezione" per attivare la build come (suggerito da @VonC).

Se si desidera utilizzare il "Flusso di lavoro" come suggerito da @flup, è possibile dare un'occhiata a http://gitlab.com che fornisce un modo semplice per gestire le richieste di pull/merge, i repository di fork e aggiungere hook.

Problemi correlati