【问题标题】:Strategy for Octopus variable substitution in config.js that is webpacked in jenkins在 jenkins 中打包的 config.js 中的 Octopus 变量替换策略
【发布时间】:2016-11-11 06:38:34
【问题描述】:

我正在开发一个 ES6 AngularJS 项目,我使用 webpack 将所有内容捆绑到 dist/app.js

我正在使用的 CI/CD 堆栈是 SCM - Jenkins - Octopus:

  1. 对我的代码的更新被推送到存储库

  2. Jenkins 克隆存储库,调用 npm installgulp,它们使用 gulp-webpack 从一个入口点捆绑和缩小所有内容并将其放入 dist/app.js

  3. 构建后,Jenkins 将应用打包到一个 nuget pkg 中,并将其推送到 Octopus Deploy,在其中将应用部署到 IIS

章鱼项目在多个环境中工作,我必须有办法根据环境替换一些配置变量。为此,Octopus 提供了“替换文件中的变量”部署步骤。

当我不使用模块捆绑器和 ES6 时,我只会有一个配置文件来设置一些我然后使用的角度常量。我会有一个config.js 文件和一个config.template.js 文件。 Octopus 将替换 config.template.js 文件中的变量,我只需将其设置为在部署后将 config.js 替换为 config.template.js

然而,现在我只是使用一个普通的config.js 来导出我需要使用的变量,然后我将其导入到相关的文件中(比如包含角度控制器函数的文件)。

使用此设置,我无法像以前那样进行替换,因为我的config.js 将被包含在dist/app.js 中。谁能帮我想出一个如何实现这一目标的策略?我想在构建之前进行 config.js - config.template.js 交换,然后让 Octopus 替换整个 app.js 包中的变量,但这似乎效率很低。

【问题讨论】:

    标签: javascript jenkins webpack octopus-deploy variable-substitution


    【解决方案1】:

    我们在构建过程中遇到了类似的情况,同样感到困惑。我们确定了一个代码内令牌替换解决方案,使用 JS 本身来确定令牌是否已被替换,以便它可以在本地开发(部署前)中工作。

    我们添加了这样的代码:

    // config --------------------------
    (function () {
        // These values will be replaced by Octopus during deployment.
        var configuredApiUrl = "#{Api:Url}";
        apiUrl = (configuredApiUrl[0] !== "#") ?
            configuredApiUrl : "http://api.local/v1";        
    })();
    

    然后我们在输出文件上设置变量替换。

    我希望这会有所帮助!

    【讨论】:

    • 所以为了清楚起见,在 octopus 中,您已经为包含所有代码/模块的输出包设置了替换?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多