Merge pull request #184 from edpauto/env-vars-support

Environment variables support
This commit is contained in:
Kuba Turek 2015-05-19 10:35:36 +02:00
commit 7f0cab1a38
3 changed files with 60 additions and 0 deletions

View file

@ -222,6 +222,7 @@ abstract class AbstractTask
*/
final protected function runCommand($command, &$output = null)
{
$command = ltrim($this->getEnvVarsString() . ' ' . $command);
if ($this->getStage() == self::STAGE_DEPLOY || $this->getStage() == self::STAGE_POST_RELEASE) {
return $this->runCommandRemote($command, $output);
} else {
@ -305,4 +306,56 @@ abstract class AbstractTask
}
return $result;
}
/**
* Returns the array of environment variables
* Returned array contains both system variables and variables set in config
* WARNING: To access system's variables you need to set proper value in your php.ini at variables_order key
* @see http://php.net/manual/en/ini.core.php#ini.variables-order
*
* @return array
*/
protected function getEnvVariables()
{
$configVars = array_merge(
$this->getConfig()->general('env', []),
$this->getConfig()->environmentConfig('env', []),
$this->getConfig()->getParameter('env', []),
[
'variables' => $this->getConfig()->getParameter('env.variables', [])
]
);
if (isset($configVars['variables'])) {
$configVars = $configVars['variables'];
}
$envVariables = array_merge(
$_ENV,
$configVars
);
return $envVariables;
}
/**
* Returns ready to inject environment string
* The string is build from env vars array in schema:
* key1=value1 key2=value3 ...
*
* @return string
*/
protected function getEnvVarsString()
{
$envVarsArray = $this->getEnvVariables();
$envVars = array_map(
function ($key, $value) {
return "$key=$value";
},
array_keys($envVarsArray),
$this->getEnvVariables()
);
return join(' ', $envVars);
}
}

View file

@ -22,3 +22,6 @@ tasks:
- sampleTask
- sampleTaskRollbackAware
verbose_logging: true
env:
variables:
symfony_env: prod

View file

@ -7,3 +7,7 @@ verbose_logging: false
scm:
type: git
url: git://github.com/andres-montanez/Zend-Framework-Twig-example-app.git
env:
variables:
node_path: "/bin/node"
symfony_env: prod