2013-10-07 14 views
5

Uso Jenkins molto e molti lavori diversi vengono eseguiti sul cluster. Ogni tanto un lavoro fallisce con un errore oscuro e sono stato in grado di eseguire il debugging sul fatto che il lavoro A sta usando un artefatto X e un lavoro B lo ha appena scaricato o ne ha creato una nuova versione (con Maven) .Come gestire i build concomitanti di Maven su Jenkins?

Il lavoro A non riesce con java.lang.NoClassDefFoundError o qualcos'altro con il file ZIP corrotto o segfault da un'implementazione ZIP utilizzata da Java.

Quindi la soluzione più ovvia sarebbe utilizzare un repository privato locale per i lavori ma è piuttosto una soluzione costosa su disco e Internet. Ciò significherebbe che tutti i responsabili del lavoro scaricherebbero l'intera Internet.

Per alcuni casi, un carico eccessivo di file di classe dal file JAR che corrompe spesso ci aiuta a limitare il danno, ma non vogliamo farlo per tutto.

Altre soluzioni? Qualche tipo di blocco migliorato per il repository?

+0

Hai esplorato le opzioni di 'blocco build mentre il progetto upstream/downstream sta costruendo'? – artbristol

+0

Sì, usando questo, ma questo può succedere quasi con qualsiasi dipendenza quindi se uso il plugin per tutto quello che posso avere un solo lavoro con Maven da eseguire alla volta :( – toomasr

risposta

4

Sì, sembra che a maven non piaccia l'accesso simultaneo a un singolo repository locale (c'è un issue aperto di recente, solo 7 anni fa). La creazione di pronti contro termine per ogni lavoro potrebbe essere abbastanza massiccia. Tuttavia, c'è una variabile $EXECUTOR_NUMBER, quindi forse potresti usarla per creare un repository locale Maven per ogni esecutore Jenkins.

+2

Meglio usare l'opzione di configurazione in Jenkins per avere un repository per Lavoro o esecutore – khmarbaise

+0

@khmarbaise Sì, buon punto La posizione del repository dipendente dall'esecutore potrebbe essere configurata dalla configurazione globale di jenkins. – kan

Problemi correlati