Come gestire le credenziali di sviluppo rispetto a quelle generiche (esempio)?

1

Sono uno sviluppatore dilettante e vorrei condividere parte del mio codice tramite GitHub o GitLabs.

Il problema che sto cercando di risolvere è che ho un file di configurazione con le mie credenziali reali (utilizzato durante lo sviluppo) e vorrei fornire uno generico (con i segnaposto per le credenziali) - tutto questo senza modificare il codice.

In termini pratici, ho oggi (in pseudo-codice)

arguments = yaml.read("configuration.yaml")

e vorremmo evitare di trascinare un

# do not forget to switch the config files before pushing to github
arguments = yaml.read("configuration-dev.yaml")
#arguments = yaml.read("configuration.yaml")

Esiste un metodo consolidato per tali problemi? (in generale, elementi nel codice specifici di un'installazione, ma con la necessità di inviare voci generiche / segnaposto)

Nota: per lo più sto sviluppando in Python se rende un approccio più semplice

    
posta WoJ 05.10.2017 - 13:16
fonte

1 risposta

3

Non sono sicuro che questi siano i metodi stabiliti , tuttavia l'approccio spesso visto è quello di utilizzare le variabili d'ambiente o l'unione di configurazione.

Utilizzo delle variabili Env

Questo ti permette di specificare una configurazione di default o, quando una certa percentuale diENV_VAR è definita, di usare quell'ambiente var.

Il codice di esempio sarebbe (usando i file INI di ConfigParser di Python):

config_path = os.environ.get('ENV_VAR', 'default_config.ini')
config = ConfigParser()
config.read(config_path)

Il vantaggio è che potresti utilizzare lo stesso metodo per la distribuzione con production_config.ini . Basta chiamare il tuo codice come:

$ ENV_VAR='prod_config.ini' my_python_script.py

Uso della config fusione

Ancora, Python's ConfigParser ti permette di leggere un elenco di file di configurazione , dove le opzioni definite nei file successivi sovrascrivono quelle precedenti. Se i file specificati non esistono, vengono ignorati. Questa è in effetti una fusione di configurazione.

(...)
config.read(['generic_config.ini', 'local_config.ini'])

Se utilizzi YAML potresti dover fornire logica personalizzata per la fusione della configurazione .

In entrambi i casi, local_config.ini deve essere ignorato e non impegnato nel repository. Ciò consente ad ogni membro del team / contributore di utilizzare automaticamente il proprio local_config.ini .

Assicurati di non impegnare mai le credenziali nel repository di codice!

    
risposta data 06.10.2017 - 07:44
fonte

Leggi altre domande sui tag