Come faccio a passare da "ecco lo zip" a una buona strategia di rilascio?

5

Posso scrivere codice, risolvere dipendenze e far funzionare il mio programma sul mio computer; Non ho idea di dove andare da qui però. Come faccio a preparare il software per la distribuzione?

L'ambiente scolastico mi ha insegnato a fare alcuni test casuali a mano, assicurarmi che nulla fosse ovviamente rotto, quindi gettare tutti i file sorgente in un file zip e inviarlo via. Questo è tutto ciò che è necessario per ottenere un buon voto è la maggior parte dei corsi di CS. Nessuno mi ha insegnato come rilasciare agli utenti reali.

Gli unici indizi che ho sono alcune frasi come "build automatici" e "integrazione continua", ma non so cosa significano. Come posso distribuire correttamente il mio lavoro? Come posso rendere facile per gli altri? Come posso andare oltre le versioni di "here's the zip"?

    
posta Buttons840 24.07.2012 - 22:51
fonte

3 risposte

7

Nel mondo reale si vuole davvero avvicinarsi al solo clic su un pulsante e avere tutto automatizzato il più possibile. Se stai installando te stesso vale la pena per il tempo che risparmia e perché vuoi rendere molto difficile fare un errore con il software live. Se non lo sei, vale la pena, perché in quasi tutti i casi poche persone si occuperanno di un processo di installazione difficile.

Questo può essere un bel po 'di lavoro ma è concettualmente piuttosto semplice. Devi scrivere un codice che verifichi che la chiusura transitiva di tutte le dipendenze sia soddisfatta e aggiusti qualcosa che manca o che abbia un buon messaggio di errore. Se ci sono opzioni di installazione che non puoi sapere in anticipo, devi supportare l'impostazione di quelle tramite un'interfaccia utente o uno script o entrambi. Devi giocare bene con qualsiasi meccanismo di installazione standard presenti nel tuo ambiente.

Le dipendenze potrebbero non essere solo file, ma potrebbero essere cose come assicurarsi che le voci del registro di Windows di cui il programma si basa siano presenti, configurare un server web per il programma, ecc.

Fondamentalmente devi fare programmaticamente tutto ciò che qualcuno farebbe a mano, gestendo tutti i diversi scenari possibili.

La compilazione automatica è un termine abbastanza esplicativo. Molte volte la build non ottiene tutto l'amore di cui ha bisogno e il processo di compilazione è scritto in un documento con molti passaggi. In genere vale la pena di avere qualche forma di configurazione alla guida di uno script completamente automatico. Questa è una build automatizzata. Di solito parte della build sta eseguendo test automatici per assicurarsi che non solo la build produca un programma, ma che almeno le parti testate del programma funzionino davvero.

L'integrazione continua non è fattibile senza una build automatizzata, il che è un grande motivo per cui vale la pena fare una build automatizzata. Significa che la build viene eseguita automaticamente usando uno schema (come "ogni volta che il nuovo codice è stato archiviato da quando ho terminato l'ultima build su cui stavo lavorando"). Generalmente una grande parte del valore di questo è che la build esegue test automatici, quindi se le modifiche al codice rompono qualche angolo polveroso del programma lo scoprirete automaticamente e abbastanza velocemente. Ci può essere qualche valore solo sapendo che tutto si compila comunque.

Distribuire il tuo lavoro e renderlo facile per gli altri implicherebbe creare un programma di installazione e seguire le convenzioni che il tuo pubblico potrebbe aspettarsi, come mettere in un app store o un repository di codice sorgente. Ci sono molti strumenti in vari ambienti che, dato un nome, vanno a cercarti il codice e installarlo. Il tuo codice può partecipare a questo se segui tutte le regole necessarie affinché quegli strumenti funzionino.

Sono stato incredibilmente generico perché i dettagli cruenti variano un po 'in ambienti diversi, quindi una risposta specifica dipenderà molto da quello che stai facendo.

    
risposta data 25.07.2012 - 00:39
fonte
2

Dovresti farlo in modo incrementale. Il prossimo passo dopo aver dato a qualcuno un file zip è dare loro un programma di installazione che si occupi della configurazione per loro.

In primo luogo, dovresti imparare a creare manualmente un programma di installazione. Dai un'occhiata a InnoSetup , un programma gratuito per creare programmi di installazione. Gli dai un file di script contenente un elenco delle cose che vuoi installare (e altre impostazioni, se ne hai bisogno) e produce un Setup.exe . Scopri come utilizzarlo (o un altro strumento di creazione dell'installatore).

Generazioni automatizzate significa eseguire l'intero processo, dal controllo del codice dal controllo del codice sorgente (hai imparato a usare ancora il controllo del codice sorgente?), fino alla creazione del programma di installazione da caricare sul server, da uno script. Non cercare di automatizzare nulla fino a quando non capisci come eseguirlo manualmente. L'automazione di qualcosa è sempre più difficile che eseguirla manualmente. Ma una volta compresi tutti i passaggi precedenti, è possibile iniziare a scrivere script di compilazione. Uno script tipico sarebbe simile a questo (pseudocodice):

SVN Checkout (project folder)
command line compiler ("project folder\tests\test harness.project")
if run ("project folder\tests\output\test harness.exe") <> 0 then
  Abort ("tests failed")
command line compiler ("project folder\Full Build.projectgroup")
Installer Compiler ("project folder\installerScript.is")
FTP upload ("ftp://myServer.com/downloads", "project folder\output\setup.exe", username, password)

Questo è molto semplificato, ovviamente, ma questa è una panoramica dell'idea generale.

L'integrazione continua fa un passo in più: mette un gancio nel tuo server di controllo sorgente in modo che possa avviare un processo di compilazione automatizzata ogni volta che qualcuno controlla il codice. In questo modo, ottieni un feedback più o meno immediato se qualcuno rompe la build. Non è qualcosa che è particolarmente utile su progetti su piccola scala, ma può essere utile in un ambito più ampio.

    
risposta data 25.07.2012 - 02:34
fonte
0

Dipende dal linguaggio, dalle strutture, dall'IDE, dal controllo del codice sorgente e dalle tecnologie utilizzate in generale. Detto questo, in genere puoi creare un pacchetto di installazione.

    
risposta data 24.07.2012 - 22:56
fonte