VSTS释放管道 - 令牌替换

时间:2018-01-04 18:00:41

标签: azure-devops azure-pipelines-release-pipeline

我一直在使用替换令牌(来自VS Marketplace),到目前为止,它在web.config文件中的动态连接字符串替换方面做得很好。它的工作方式,在We​​b.Release.config我有这样的结构:

#include "widget.h"
#include <QPainter>
#include <QPoint>
#include <QPainterPath>
#include <QBrush>
#include <QPolygon>
#include <QVector>

Widget::Widget(QWidget *parent)
  : QWidget(parent),
    points(3)
{
    points[0] = QPoint(20, 20);
    points[1] = QPoint(80, 20);
    points[2] = QPoint(50, 80);

    setFixedSize(width, height);   
    setMask(getRegion());
}

Widget::~Widget()
{

}

QPainterPath Widget::getPath() const
{
    QPainterPath path;
    path.moveTo(points[0]);
    path.lineTo(points[1]);
    path.lineTo(points[2]);
    path.lineTo(points[0]);

    return path;
}

QRegion Widget::getRegion() const
{
  return QRegion(QPolygon(points));
}

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainterPath path = getPath();

    QPainter painter(this);
    painter.setPen(Qt::NoPen);
    painter.fillPath(path, QBrush(Qt::black));
}

当我在VSTS中开始发布时,它会将此标记(在#34; __&#34;之间)替换为发布管道中的变量值。所以,我总是有一个与相关环境相对应的连接字符串。 昨天我决定在这个文件中添加一些变量,希望它能够正常工作,因为我有很多按键应该出于安全原因进行参数化。 好吧,如果我添加这样的文件:

<connectionStrings>
    <add name="Default"
        connectionString="__AzureDBConnectionString__"
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>

它没有用。在部署的web.config中,我看到value =&#34; mailToken &#34;即,它不会被存储在释放管道中的变量所取代(对于连接字符串)。 经过大约一天的痛苦之后,我发现唯一可以替换的参数是连接字符串(因为这是构建自动生成的唯一参数#34; Web.SetParameters.xml&#34;文件)。一些消息来源建议我尝试使用parameter.xml文件,但没有成功。重要的是所有变量都来自发布管道变量列表(而不是在配置文件中硬编码)。 有人可以建议一种正确的方法来替换appSetting中的值或其他解决方法(没有替换令牌任务等)吗?

2 个答案:

答案 0 :(得分:2)

根据您的描述,您使用的是Web部署包(Web.SetParameters.xml),默认情况下,Web.Release.config中的appSettings不会添加到Web.SetParameters.xml文件中,但会替换该值在生成Web部署包时直接在web.config文件中,因此web.config文件(在zip包文件中)中的mailToken值将为 mailToken

因此,替换它的简单方法是在文件转换和文件转换中使用XML变量替换。 IIS Web App部署 Azure App Service Deploy 任务的变量替换选项部分。您只需将具有相同名称键值mailToken)的变量添加到发布定义中,然后选中 XML变量替换选项。 (不需要在Web.Release.config中配置它)

更多信息,请参阅:XML variable substitution

答案 1 :(得分:0)

我最近也在与类似的东西挣扎,直到今天我才来到solution。我的主要挂断是在我的项目目录中定义parameters.xml文件,因为这与用于Web部署的vsts-tasks发布任务中定义的一些自动替换逻辑冲突。我只为那些不会通过VSTS自动处理的属性定义parameters.xml。

另外,我建议将此msbuild参数添加到&#34; Build Solution&#34;下的构建作业中,这将阻止VSTS在Web部署包的setparameters.xml文件中添加连接字符串。

/p:AutoParameterizationWebConfigConnectionStrings=false

最终如果这不起作用,您将要在环境变量中将System.debug设置为true,以便您可以准确了解发布期间发生的情况。不幸的是,您在system.debug上看到的调试日志并不是很好,但它们可能有所帮助。

祝你好运!