Избегание фиксации глобального конфига в git

322
Jonas Stumph Stevnsvig

Репост https://stackoverflow.com/questions/53233742/avoiding-committing-of-global-config-to-git

Я пишу сценарий развертывания, чтобы параметризовать (и в конечном итоге подключить) развертывание к устаревшему приложению. Я создал ряд <env>.<appname>.confфайлов, а также сценарий развертывания в одном git-репо и параметризованный файл «globals.inc» в моем репо.

Моя проблема в том, что я хотел бы иметь возможность редактировать его в моем каталоге dev, не добавляя его в git.

Я подумал добавить его в свой .gitignoreфайл, но это означало бы, что у меня возникнет другой набор проблем, когда я захочу обновить globals.incфайл потенциальными новыми переменными.

Мое первоначальное решение состояло в том, чтобы иметь globals.inc.templateфайл, а затем добавить globals.incв каталог, имея тот ( globals.inc) в .gitignore. Я хотел бы получить некоторую информацию о том, есть ли элегантный трюк Git, который я могу использовать, или я должен просто пойти по шаблону маршрута и скопировать шаблон перед запуском захватывающих частей сценария развертывания.

deploy.sh

#! /bin/bash  #Inspiration: https://blog.rjmetrics.com/2010/02/01/simple-deploy-script-for-php-applications/  #Deployscript # Detect exactly 1 argument  APP_NAME=MyAPP #GIT_ROOT=localhost:/repo #GIT_USER=josste #APP_REPO=$GIT_ROOT/$APP_NAME.git  RELEASE_NAME=`date +"%Y-%m-%d-%H%M%S"`  #inspiration: https://clubmate.fi/replace-strings-in-files-with-the-sed-bash-command/ configurer(){ # Loop the config array for i in "${!confs[@]}" do search=$i replace=$ # Note the "" after -i, needed in OS X sed -i "s/$/$/g" $GLOBALS_FILE done }  #Get environment if (($# == 1)); then DEPLOY_ENV=$1 echo "Deploying $APP_NAME to $DEPLOY_ENV environment." DEPLOY_FILE=$DEPLOY_ENV.appname.conf else echo "Usage: deploy.sh " exit 1 fi  if [ -f $DEPLOY_FILE ]; then #load Configuration . $DEPLOY_FILE  #check if directory exists if [ -d $DEPLOY_DIR ]; then echo "folder $DEPLOY_DIR exists. locating globals.inc" GLOBALS_FILE="$DEPLOY_DIR/globals.inc"  if [ -f $GLOBALS_FILE ]; then echo "file $GLOBALS_FILE found"  GLOBALS="" #replace all variables in globals.inc configurer  #add git version to file VER="$(git -C $DEPLOY_DIR rev-parse HEAD)" echo "define("\"APP_VERSION\"","\"$VER\"");" >> $GLOBALS_FILE  else echo "expected to find $GLOBALS_FILE but there was nothing there" fi else echo "folder $DEPLOY_DIR not found" fi else echo "Could not find deploy file for $DEPLOY_ENV environment, it should be located in $DEPLOY_FILE" exit 1 fi 

globals.inc

<?php  /** * GLOBAL variables  *  */ error_log("SERVER_ADDR: " . $_SERVER["SERVER_ADDR"]);  define("SITE_TITLE","¤SITE_TITLE¤"); define("SITE_NAME", "¤SITE_NAME¤"); define("SITE_FQDN", "¤SITE_FQDN¤"); define("DEFAULT_FROM_EMAIL", "¤DEFAULT_FROM_EMAIL¤"); define("SESSION_NAME","¤SESSION_NAME¤"); define("MYSQL_USERNAME","¤MYSQL_USERNAME¤"); define("MYSQL_PASSWORD","¤MYSQL_PASSWORD¤"); define("MYSQLDATABASENAME","¤MYSQL_DB_NAME¤"); define("MYSQL_HOSTNAME","¤MYSQL_HOSTNAME¤");  $mysqlConn = new mysqli(MYSQL_HOSTNAME, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQLDATABASENAME, 3306); if ($mysqlConn->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqlConn->connect_errno . ") " . $mysqlConn->connect_error; } $mysqlConn->query("SET NAMES 'utf8'"); 

Пример dev.myapp.conf

declare -A confs confs=( [¤SITE_TITLE¤]="MyAPP TestSite" [¤SITE_NAME¤]=myapptest [¤SITE_FQDN¤]=myapp.local [¤DEFAULT_FROM_EMAIL¤]=spam@stevnsvig.com [¤SESSION_NAME¤]=MyAppTestSession [¤MYSQL_HOSTNAME¤]=localhost [¤MYSQL_DB_NAME¤]=myappdb [¤MYSQL_USERNAME¤]=myappdbuser [¤MYSQL_PASSWORD¤]=0c5a1a783e45edsfsdf798sdfh943h59fd643yth943 )  DEPLOY_DIR=/d/Udvikling/MyApp GIT_BRANCH=development 
0

0 ответов на вопрос

Похожие вопросы