В Octopus, как выполнить подстановку переменных в сопоставлении экземпляров NServiceBus. xml - PullRequest
0 голосов
/ 22 января 2020

При использовании NServiceBus в проекте C# файл с именем instance-mapping. xml используется для указания того, на каком компьютере размещена каждая очередь. Например:

<?xml version="1.0" encoding="utf-8" ?>
<endpoints>
    <endpoint name="QueueName1">
        <instance machine="localhost"/>
    </endpoint>

    <endpoint name="QueueName2">
        <instance machine="localhost"/>
    </endpoint>
</endpoints>

В Octopus, как я могу выполнить подстановку переменных для файла, подобного этому? Таким образом, атрибут «machine» внутри QueueName1 изменяется на «server1», а атрибут внутри QueueName2 изменяется на «server2». Например:

<?xml version="1.0" encoding="utf-8" ?>
<endpoints>
    <endpoint name="QueueName1">
        <instance machine="server1"/>
    </endpoint>

    <endpoint name="QueueName2">
        <instance machine="server2"/>
    </endpoint>
</endpoints>

В Octopus есть встроенные функции для простой замены ключа / значения, например. appsettings и строки подключения. Но приведенный выше файл немного сложнее, так как включающий элемент идентифицирует ключ.

1 Ответ

1 голос
/ 23 января 2020

Возможно, я упрощаю ваш вопрос, но чтобы получить желаемое instance-mapping.xml, я бы использовал преобразование конфигурации. Пример файла instance-mappings.transform.xml будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<endpoints xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <endpoint name="QueueName1" xdt:Locator="Match(name)">
        <instance machine="server1" xdt:Transform="SetAttributes" />
    </endpoint>

    <endpoint name="QueueName2" xdt:Locator="Match(name)">
        <instance machine="server2" xdt:Transform="SetAttributes" />
    </endpoint>
</endpoints>

А затем в Octopus добавьте преобразование конфигурации instance-mapping.transform.xml => instance-mapping.xml.

Если вы хотите, чтобы значения машины были настроены как переменные Octopus, вы Можно добавить подстановку переменных. Укажите переменные: machine[QueueName1] со значением machine1 и machine[QueueName2] со значением machine2 и измените файл преобразования:

<?xml version="1.0" encoding="utf-8" ?>
<endpoints xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <endpoint name="QueueName1" xdt:Locator="Match(name)">
        <instance machine="#{machine[QueueName1]}" xdt:Transform="SetAttributes" />
    </endpoint>

    <endpoint name="QueueName2" xdt:Locator="Match(name)">
        <instance machine="#{machine[QueueName2]}" xdt:Transform="SetAttributes" />
    </endpoint>
</endpoints>

Если во время разработки возникают трения при добавлении локальных конечных точек, которые этого не делают Имея смысл в других средах, вы можете использовать Octopus в качестве источника правды для ваших конечных точек. Для этого добавьте переменные для каждой конечной точки в ваш проект Octopus:

Example endpoint variable configuration

Затем вы можете установить свои конечные точки в файле преобразования на основе значений в Осьминог:

<?xml version="1.0" encoding="utf-8" ?>
<endpoints xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace">
#{each e in endpoint}
    <endpoint name="#{e.Name}">
        <instance machine="#{e.Machine}"/>
    </endpoint>
#{/each}
</endpoints>

Учитывая пример переменных и файл преобразования, используя подстановку переменных и преобразования конфигурации в Octopus, вы получите желаемое instance-mapping.xml:

<?xml version="1.0" encoding="utf-8"?>
<endpoints>
    <endpoint name="QueueName1">
        <instance machine="Machine1"/>
    </endpoint>
    <endpoint name="QueueName2">
        <instance machine="Machine2"/>
    </endpoint>
</endpoints>

Я надеюсь, что это помогает.

...