在 Jenkins 上运行时覆盖环境变量

发布于 2025-01-02 08:41:33 字数 621 浏览 2 评论 0原文

我正在使用 PHPUnit 和 Jenkins 测试 Zend Framework 应用程序。我需要覆盖 APPLICATION_ENV 环境变量,该变量是在 PHPUnit bootstrap.php 文件中使用 PHP 的 getenv 访问的:

<?php

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));

... use APPLICATION_ENV to pick database, configuration, etc. ...

我有两个环境:testing (对于本地机器)和 testing-ci (对于 Jenkins 机器)。当它在 Jenkins 中运行时,如何将变量设置为 testing-ci ?有没有办法在 build.xml 中为 Ant 或 Phing 设置它?

I'm testing a Zend Framework application using PHPUnit and Jenkins. I need to override the APPLICATION_ENV environment variable which is access using PHP's getenv in the PHPUnit bootstrap.php file:

<?php

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));

... use APPLICATION_ENV to pick database, configuration, etc. ...

I have two environments: testing (for local machines) and testing-ci (for Jenkins machine). How can I set the variable to testing-ci when it runs in Jenkins? Is there any way to set it in build.xml for Ant or Phing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

廻憶裏菂餘溫 2025-01-09 08:41:33

第1步:将环境变量添加到Jenkins。

根据您的需要打开全局或特定于项目的配置页面,然后向下扫描环境变量部分。选中该复选框并使用添加按钮添加键/值对。

这些将由 Jenkins 传递到您的 Ant 构建脚本。

第 2 步:将它们加载到 Ant 中。

在 Ant build.xml 脚本顶部附近,加载带有 env 前缀的所有环境变量,这样它们就不会干扰其他属性。

<property environment="env"/>

现在,所有导入的变量都可以使用 env 前缀,例如 ${env.HOME}

第 3 步:将它们传递给 PHPUnit。

假设您使用 任务来运行 PHPUnit,您可以使用 子元素将每个所需的变量传递给它。

<exec taskname="test" executable="phpunit">
    <env key="APPLICATION_ENV" value="${env.APPLICATION_ENV}"/>
    ...
</exec>

注意:您可能只想尝试第一步,看看 Ant 是否会将环境变量传递给执行的子进程,但我认为其他两个步骤有助于明确需要什么其他开发商。

Step 1: Add the environment variables to Jenkins.

Open either the global or project-specific configuration page depending on your needs and scan down for the Environment variables section. Check the checkbox and use the Add button to add key/value pairs.

These will be passed by Jenkins to your Ant build script.

Step 2: Load them into Ant.

Near the top of your Ant build.xml script, load all environment variables with an env prefix so they don't interfere with other properties.

<property environment="env"/>

Now all imported variables will be available using the env prefix, e.g. ${env.HOME}.

Step 3: Pass them to PHPUnit.

Assuming you're using the <exec> task to run PHPUnit, you can pass each needed variable to it using the <env> child element.

<exec taskname="test" executable="phpunit">
    <env key="APPLICATION_ENV" value="${env.APPLICATION_ENV}"/>
    ...
</exec>

Note: You might want to try just the first step to see if Ant will pass the environment variables along to executed child processes, but I think the other two steps are good for making it clear what is required to other developers.

乞讨 2025-01-09 08:41:33

好的。

这就是您要做的...

首先,创建一个名为 bootstrap.php 的新文件。

接下来,在 boostrap.php 中,输入以下代码:

if (!empty($argv) && 
    ($key = array_search('--environment', $argv)) !== FALSE)
{
    $env = $argv[$key + 1];
    putenv('APPLICATION_ENV=' . $env);
}

将 bootstrap.php 加载到测试套件或(更好)phpunit.xml 中。

最后,通过 CI 构建配置,或通过控制台或任何地方,执行单元测试,例如 phpunit UnitTest.php --environment dev 。

你可以走了。

OK.

Here's what you do...

First, create a new file called bootstrap.php.

Next, in boostrap.php, put the following code:

if (!empty($argv) && 
    ($key = array_search('--environment', $argv)) !== FALSE)
{
    $env = $argv[$key + 1];
    putenv('APPLICATION_ENV=' . $env);
}

Load the bootstrap.php into your testsuite or (even better) phpunit.xml.

Finally, via your CI build config, or via the console or wherever, execute your unit tests like phpunit UnitTest.php --environment dev.

You're good to go.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文