Questa domanda continua su una domanda precedente qui riportata su integrazione continua per software scientifico . Come il poster di questa domanda, sto sviluppando software per simulazioni numeriche e sono in procinto di applicare l'integrazione continua (CI).
Il mio problema principale è che ho eseguito test per la verifica che devono essere eseguiti per un lungo periodo di tempo (> 10 ore). Inoltre, tali test richiedono l'uso di risorse di calcolo ad alte prestazioni (un cluster HPC).
Da quanto ho letto fino ad ora, l'idea alla base di CI è assicurarsi che un'unione non possa essere eseguita nel repository remoto, se:
- la compilazione non è riuscita (questo non è un problema)
- un caso di verifica è rotto dalla richiesta pull.
Il test per il successo della build è possibile sul server che ospita git (Bitbucket, Gitlab, ecc.), perché il codice può essere compilato piuttosto rapidamente (ordine dei minuti).
Il test per i casi di verifica richiederebbe al server di repository Git remoto di comunicare con il cluster HPC ed eseguire le simulazioni finché non sarà sicuro che nessun caso di verifica è stato risolto.
Sto usando Bitbucket come server git remoto, e stavo leggendo su pipeline di Bitbucket, Travis, Jenkins, ecc.
Ho trovato informazioni sull'integrazione di Bitbucket e Jenkins: qui e //bjurr.com/continuous-integration-with-bitbucket-server-and-jenkins/">here.
Il problema che vedo con l'uso di un altro server per l'esecuzione dei test è l'autenticazione (sicurezza). Gli utenti del cluster HPC accedono a questa macchina tramite SSH. Il cluster HPC gestisce l'esecuzione di simulazioni con l'aiuto del gestore del carico di lavoro che pianifica le simulazioni come lavori che sono descritti con una coda, una priorità e uno stato.
Se utilizzo Jenkins per inviare un lavoro sul cluster HPC utilizzando il plug-in ssh , lo script presenterà una simulazione e uscirà con 0, se l'invio è andato a buon fine. Ciò non significa che il test abbia avuto esito positivo, poiché la simulazione può richiedere ore per essere completata.
Inoltre, se il server Jenkins deve utilizzare SSH per connettersi al cluster HPC, ha bisogno della chiave pubblica SSH. Non ho trovato il modo per Bitbucket di comunicare queste informazioni a Jenkins.
Qualcuno ha provato a utilizzare l'integrazione continua con test eseguiti per ore / giorni?
Modifica : le risposte alla domanda riguardano il fatto che non si può attendere 10 ore perché il suo impegno venga accettato. Questo non è il piano: l'idea è di eseguire l'intera suite di test, quando una richiesta pull viene inviata al repository principale upstream, per assicurarsi che nulla di ciò che è stato inviato nella richiesta pull interrompa ciò che è già stato implementato. Gli stessi test possono (e dovrebbero) essere eseguiti manualmente dagli sviluppatori sul cluster HPC prima ancora di inviare la richiesta di pull. Nel mio campo, la richiesta di pull indica che un agitero numerico è stato sviluppato e testato, questo succede forse una volta al mese.