Le best practice costruiscono e distribuiscono per applicazioni on premise

2

Lavoro per una società di software che tende a distribuire applicazioni in sede per i clienti aziendali. Il software normalmente consiste in software lato server (alcuni microservizi) e 1 o più applicazioni client.

Le applicazioni distribuite sono di solito una versione altamente personalizzata di un'applicazione generale. Quindi abbiamo un repository git separato per ogni installazione.

Ho cercato di migliorare il ciclo di compilazione e distribuzione, tuttavia sto cercando di trovare le migliori pratiche per questo tipo di distribuzione. Tutti gli articoli che ho letto parlano di implementazione continua, ma tutti gli strumenti correlati sembrano essere adattati alla distribuzione sul cloud o sui nostri server.

Al momento utilizziamo team city come nostro server di build. Ad un certo punto raggiungiamo un punto in cui il software verrà rilasciato, quindi forziamo una build sul ramo master e lo etichettiamo di conseguenza.

I file binari vengono quindi copiati su un server di sviluppo o di produzione di proprietà del cliente. E la configurazione è fatta manualmente da noi. Manualmente significa principalmente l'esecuzione di script per l'installazione di file di configurazione, l'installazione di servizi e l'installazione di database.

Il problema che stiamo affrontando nel processo di compilazione e distribuzione è molto manuale. Ciò significa che alcune volte ci sono errori (dimenticato di eseguire script, errori di battitura, copiare alcuni file)

C'è qualcosa che possiamo fare per migliorarlo? Tenendo presente che normalmente abbiamo solo accesso ai server dei clienti attraverso una sorta di connessione Van e non saremo in grado di implementare sul loro sito senza che le richieste di modifica siano firmate, ecc.

    
posta Nick Williams 09.09.2016 - 19:49
fonte

2 risposte

1

Is there anything we can do to improve it?

Automatizzare.

Presumibilmente, il processo di compilazione e distribuzione è più o meno lo stesso ogni volta. Scrivi alcuni script che automatizzano questo processo. A differenza degli umani, i computer sono molto bravi a ripetere un processo banale senza errori.

    
risposta data 09.09.2016 - 20:14
fonte
2

Per espandere la risposta di Robert,

L'automazione è sicuramente l'approccio corretto. Il seguente dovrebbe fornire un buon punto di partenza:

  • Ansible: questo dovrebbe essere usato per effettivamente provision il server. Se i compiti di Ansible sono scritti correttamente, possono essere idempotenti (eseguire più volte senza preoccupazioni) e aggiornano / modificano solo ciò che deve essere modificato. Il modo tipico di usare Ansible è di eseguirlo "da remoto" usando SSH, ma ti consiglio di usare Ansible in modalità "locale" (spiegato sotto).

  • Script di shell: se qualcosa di specifico / complesso deve essere eseguito all'avvio o alla fine della corsa di Ansible, è meglio spostarlo in uno script di shell che può essere chiamato separatamente. Quando si scrivono script di shell, assicurarsi che siano conformi a POSIX e non contengano troppa logica pazzesca, in questo modo possono essere eseguiti in modo sicuro su vari sistemi operativi e non sarà troppo difficile eseguire il debug lungo la linea.

  • Tirare, non forzare: poiché i clienti devono scaricare i binari, è possibile ospitarli su un server HTTPS locale / privato e fare in modo che gli script di Ansible "tirino" (scarica) i binari. È anche possibile aggiungere un hash sha256 nei file di configurazione di Ansible YAML per verificare l'integrità dei download. Naturalmente lo sviluppo sarà un po 'più lento se si ha sempre bisogno di aggiornare l'hash nei file di configurazione, ma se non si cambiano i binari troppo spesso (es: una volta al mese), è un approccio accettabile.

  • Macchine virtuali: se si imposta una macchina virtuale, è possibile testare gli script di Ansible e di shell su di essi senza influire sui server del cliente. Ciò ti consente di rilevare gli errori ed evitare di distruggere un server di produzione.

Il mio approccio è il seguente:

  • Verifica che sul server sia installato Git e Ansible.
  • Verifica che il server abbia una chiave privata SSH per scaricare GitHub o un server privato git + ssh.
  • SSH nel server ed esegui git pull , quindi ansible-playbook -c local

In modalità "locale", è necessario che sul server sia installato Ansible, ma ha il vantaggio che il provisioning è molto più veloce e non richiede una connessione di rete (eccetto per il lancio iniziale di git).

Questo metodo consente ai clienti di decidere manualmente quando un server viene aggiornato e consente di verificare il codice inviato al repository Git, prima di eseguire Ansible sul server. Se stai utilizzando GitHub per tenere traccia degli script di Ansible, puoi creare un account bot per estrarre le modifiche al repository (consentito come da GitHub's ToS), o utilizzare la chiave SSH pubblica del tuo server come chiave di distribuzione.

Ho elencato alcune altre best practice per la creazione di software per locali, che puoi leggere su qui per ulteriori suggerimenti.

    
risposta data 12.01.2017 - 05:27
fonte

Leggi altre domande sui tag