파일 변환 및 변수 대체 참조

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019 | TFS 2018

참고 항목

Microsoft Visual Studio Team Foundation Server 2018 및 이전 버전에는 다음과 같은 이름 지정 차이점이 있습니다.

  • 빌드 및 릴리스용 파이프라인을 정의라고 합니다.
  • 실행을 빌드라고 합니다.
  • 서비스 연결을 서비스 엔드포인트라고 합니다.
  • 스테이지 를 환경이라고 합니다 .
  • 작업을 단계라고 합니다.

Azure 앱 서비스 배포 작업 버전 3 이상 및 IIS 웹앱 배포 작업과 같은 일부 작업을 통해 사용자는 지정된 환경에 따라 패키지를 구성할 수 있습니다. 이러한 작업은 parameters.xml 파일의 값으로 web.config 파일의 값 재정의를 지원하는 msdeploy.exe 사용합니다. 그러나 파일 변환 및 변수 대체는 웹앱 파일에만 국한되지 않습니다. XML 또는 JSON 파일에서 이러한 기술을 사용할 수 있습니다.

참고 항목

파일 변환 및 변수 대체는 Azure Pipelines에서 사용하는 별도의 파일 변환 작업에서도 지원됩니다. 파일 변환 작업을 사용하여 파일 변환 및 변수 대체를 구성 및 매개 변수 파일에 적용할 수 있습니다.

구성 대체는 태스크에 대한 설정의 파일 변환 및 변수 대체 옵션 섹션에 지정됩니다. 변환 및 대체 옵션은 다음과 같습니다.

작업이 실행되면 먼저 구성 및 매개 변수 파일에서 XML 변환, XML 변수 대체 및 JSON 변수 대체를 수행합니다. 다음으로 parameters.xml 파일을 사용하여 web.config 파일의 값을 대체하는 msdeploy.exe 호출합니다.

XML 변환

XML 변환은 Web.config 변환 구문에 따라 구성 파일(*.config파일) 변환을 지원하며 웹 패키지가 배포될 환경을 기반으로 합니다. 이 옵션은 다른 환경에 대한 구성을 추가, 제거 또는 수정하려는 경우에 유용합니다. 변환은 콘솔 또는 Windows 서비스 애플리케이션 구성 파일(예 : FabrikamService.exe.config)을 포함한 다른 구성 파일에 적용됩니다.

구성 변환 파일 명명 규칙

XML 변환은 파일에서 *.config 명명된 *.Release.config 변환 구성 파일에 대해 실행되거나 *.<stage>.config 다음 순서대로 실행됩니다.

  1. *.Release.config (예: fabrikam. Release.config)
  2. *.<stage>.config (예: fabrikam. Production.config)

예를 들어 패키지에 다음 파일이 포함되어 있는 경우

  • Web.config
  • Web.Debug.config
  • Web.Release.config
  • Web.Production.config

스테이지 이름이 Production이고 변환이 적용 Web.Release.configWeb.config 되고 그 다음에 잇Web.Production.config습니다.

XML 변환 예제

  1. 필요한 구성을 사용하여 웹 애플리케이션 패키지를 만들고 파일을 변환합니다. 예를 들어 다음 구성 파일을 사용합니다.

    구성 파일

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <connectionStrings>
        <add name="DefaultConnection"
             connectionString="Data Source=(LocalDb)\\MSDB;DbFilename=aspcore-local.mdf;" />
      </connectionStrings>
      <appSettings>
        <add key="webpages:Version" value="3.0.0.0" />
        <add key="webpages:Enabled" value="false" />
      </appSettings>
      <system.web>
        <authentication mode="None" />
        <compilation targetFramework="4.5" debug="true" />
      </system.web>
    </configuration>
    

    파일 변환

    <?xml version="1.0"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
        <connectionStrings>
          <add name="MyDB"
               connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
               xdt:Transform="Insert" />
        </connectionStrings>
      <appSettings>
        <add xdt:Transform="Replace" xdt:Locator="Match(key)" key="webpages:Enabled" value="true" />
      </appSettings>
      <system.web>
        <compilation xdt:Transform="RemoveAttributes(debug)" />
      </system.web>
    </configuration>
    

    이 예제 변환 구성 파일은 다음 세 가지 작업을 수행합니다.

    • 요소 내에 새 데이터베이스 연결 문자열 추가합니다ConnectionStrings.
    • 요소 내부의 appSettings 값을 Webpages:Enabled 수정합니다.
    • 요소 내의 debug 요소에서 compilation 특성을 제거합니다 System.Web .

    자세한 내용은 Visual Studio를 사용하여 웹 프로젝트 배포에 대한 Web.config 변환 구문을 참조하세요.

  2. 릴리스라는 스테이지를 사용하여 릴리스 파이프라인을 만듭니다.

  3. Azure 앱 서비스 배포 태스크를 추가하고 XML 변환 옵션을 설정(틱)합니다.

    Release pipeline for XML transformation

  4. 릴리스 파이프라인을 저장하고 새 릴리스를 시작합니다.

  5. Web.config 파일을 열어서 Web.Release.config변환을 확인합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <connectionStrings>
        <add name="DefaultConnection"
             connectionString="Data Source=(LocalDb)\\MSDB;DbFilename=aspcore-local.mdf;" />
      <add name="MyDB"
           connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" />
      </connectionStrings>
      <appSettings>
        <add key="webpages:Version" value="3.0.0.0" />
        <add key="webpages:Enabled" value="true" />
      </appSettings>
      <system.web>
        <authentication mode="None" />
        <compilation targetFramework="4.5" />
      </system.web>
    </configuration>
    

XML 변환 정보

  • 이 기술을 사용하여 기본 패키지를 만들고 여러 단계에 배포할 수 있습니다.

  • XML 변환은 구성 파일과 변환 파일이 지정된 패키지 내의 동일한 폴더에 있는 경우에만 적용됩니다.

  • 기본적으로 MSBuild는 요소가 파일의 변환 파일에 이미 있는 경우 웹 패키지를 생성할 때 <DependentUpon> 변환을 *.csproj 적용합니다. 이러한 경우 파일에 추가 변환이 적용되지 Web.config 않으므로 Azure 앱 서비스 배포 작업이 실패합니다. 따라서 XML 변환을 <DependentUpon> 사용할 때 빌드 시간 구성을 사용하지 않도록 설정하려면 요소를 모든 변환 파일에서 제거하는 것이 좋습니다.

  • 파일이 루트 폴더에 복사되도록 각 변환 파일(Web.config)의 Build Action 속성을 Content로 설정합니다.

    ...
    <Content Include="Web.Debug.config">
       <DependentUpon>Web.config</DependentUpon>
    </Content>
    <Content Include="Web.Release.config">
       <DependentUpon>Web.config</DependentUpon>
    </Content>
    ...
    

XML 변수 대체

이 기능을 사용하면 웹 패키지 및 XML 매개 변수 파일()의 구성 파일(*.configparameters.xml파일)에서 구성 설정을 수정할 수 있습니다. 이러한 방식으로 동일한 패키지를 배포할 환경에 따라 구성할 수 있습니다.

변수 대체는 구성 파일의 applicationSettings, appSettingsconnectionStringsconfigSections 요소에만 적용됩니다. 이러한 요소 외부에서 값을 대체하려는 경우 (parameters.xml) 파일을 사용할 수 있지만 타사 파이프라인 작업을 사용하여 변수 대체를 처리해야 합니다.

XML 변수 대체 예제

예를 들어 다음 값을 변경하는 작업을 고려합니다.Web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSection>
        <section name="entityFramework" />
    </configSection>
    <connectionStrings>
        <!-- Change connectionString in this line: --> 
        <add name="DefaultConnection"
             connectionString="Data Source=(LocalDB)\LocalDB;FileName=Local.mdf" />
    </connectionStrings>
    <appSettings>
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobstructiveJavascriptEnabled" value="true" />
        <!-- Change AdminUserName in this line: --> 
        <add key="AdminUserName" value="__AdminUserName__" />
        <!-- Change AdminPassword in this line: --> 
        <add key="AdminPassword" value="__AdminPassword__" />
    </appSettings>
    <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.LocalDbConnectionFactory">
            <parameters></parameters>
        </defaultConnectionFactory>
        <providers>
            <!-- Change invariantName in this line: --> 
            <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer" />
        </providers>
    </entityFramework>
</configuration>

  1. 릴리스라는 스테이지를 사용하여 릴리스 파이프라인을 만듭니다.

  2. Azure 앱 서비스 배포 작업을 추가하고 XML 변수 대체 옵션을 설정(틱)합니다.

    Release pipeline for XML variable substitution

  3. 릴리스 파이프라인 변수에 필요한 값을 정의합니다.

    속성 보안 범위
    기본값커넥트ion Data Source=(ProdDB)\MSSQLProdDB; AttachFileName=Local.mdf 아니요 Release
    AdminUserName Prod관리Name 아니요 Release
    AdminPassword [암호] Release
    invariantName System.Data.SqlClientExtension 아니요 Release
  4. 릴리스 파이프라인을 저장하고 새 릴리스를 시작합니다.

  5. Web.config 파일을 열어 변수 대체를 확인합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <configSection>
            <section name="entityFramework" />
        </configSection>
        <connectionStrings>
            <add name="DefaultConnection"
                 connectionString="Data Source=(ProdDB)\MSSQLProdDB;AttachFileName=Local.mdf" />
        </connectionStrings>
        <appSettings>
            <add key="ClientValidationEnabled" value="true" />
            <add key="UnobstructiveJavascriptEnabled" value="true" />
            <add key="AdminUserName" value="ProdAdminName" />
            <add key="AdminPassword" value="*password_masked_for_display*" />
        </appSettings>
        <entityFramework>
            <defaultConnectionFactory type="System.Data.Entity.LocalDbConnectionFactory">
                <parameters></parameters>
            </defaultConnectionFactory>
            <providers>
                <provider invariantName="System.Data.SqlClientExtension"
                          type="System.Data.Entity.SqlServer" />
            </providers>
        </entityFramework>
    </configuration>
    

XML 변수 대체 정보

  • 기본적으로 ASP.NET 애플리케이션에는 매개 변수가 있는 기본 연결 특성이 있습니다. 이러한 값은 웹 패키지 내의 parameters.xml 파일에서만 재정의됩니다.

  • 대체는 배포 전에 발생하므로 사용자는 사용(웹 패키지 내부) 또는 setparameters 파일의 Web.configparameters.xml 값을 재정의할 수 있습니다.

JSON 변수 대체

이 기능은 JSON 구성 파일의 값을 대체합니다. 지정된 JSON 구성 파일(예 appsettings.json: )의 값을 릴리스 파이프라인 및 스테이지 변수의 이름과 일치하는 값으로 재정의합니다.

특정 JSON 파일의 변수를 대체하려면 줄 바꿈으로 구분된 JSON 파일 목록을 제공합니다. 루트 폴더를 기준으로 파일 이름을 지정해야 합니다. 예를 들어 패키지에 다음 구조가 있는 경우:

/WebPackage(.zip)
  /---- content
    /----- website
      /---- appsettings.json
      /---- web.config
      /---- [other folders] 
  /--- archive.xml
  /--- systeminfo.xml

appsettings.json 값을 대체하려면 루트 폴더의 상대 경로를 입력합니다. 예를 들면 다음과 같습니다content/website/appsettings.json. 또는 야생카드 패턴을 사용하여 특정 JSON 파일을 검색합니다. 예를 들어 appsettings.json **/appsettings.json 파일의 상대 경로와 이름을 반환합니다.

JSON 변수 대체 예제

예를 들어 이 JSON 파일의 값을 재정의하는 작업을 고려합니다.

{
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Data Source=(LocalDb)\\MSDB;AttachDbFilename=aspcore-local.mdf;"
    },
    "DebugMode": "enabled",
    "DBAccess": {
      "Administrators": ["Admin-1", "Admin-2"],
      "Users": ["Vendor-1", "vendor-3"]
    },
    "FeatureFlags": {
      "Preview": [
        {
          "newUI": "AllAccounts"
        },
        {
          "NewWelcomeMessage": "Newusers"
        }
      ]
    }
  }
}

작업은 JSON 파일 계층 구조 내의 각 위치에서 커넥트ionString, DebugMode, 사용자 값의 첫 번째 및 NewWelcomeMessage 값을 재정의하는 것입니다.

  1. 릴리스라는 스테이지를 사용하여 릴리스 파이프라인을 만듭니다.

  2. Azure 앱 서비스 배포 작업을 추가하고 JSON 변수 대체 텍스트 상자의 변수 값을 대체하기 위해 줄 바꿈으로 구분된 JSON 파일 목록을 입력합니다. 파일 이름은 루트 폴더를 기준으로 해야 합니다. wild카드s를 사용하여 JSON 파일을 검색할 수 있습니다. 예를 들어 패키지 **/*.json 내의 모든 JSON 파일에서 대체 값을 의미합니다.

    Release pipeline for JSON variable substitution

  3. 릴리스 파이프라인 또는 스테이지 변수에서 필요한 대체 값을 정의합니다.

    속성 보안 범위
    Data.DebugMode disabled 아니요 Release
    Data.Default커넥트ion.커넥트ionString Data Source=(prodDB)\MSDB; AttachDbFilename=prod.mdf; 아니요 Release
    Data.DBAccess.Users.0 관리-3 Release
    Data.FeatureFlags.Preview.1.NewWelcomeMessage AllAccounts 아니요 Release
  4. 릴리스 파이프라인을 저장하고 새 릴리스를 시작합니다.

  5. 변환 후 JSON에는 다음이 포함됩니다.

    {
      "Data": {
        "DefaultConnection": {
          "ConnectionString": "Data Source=(prodDB)\MSDB;AttachDbFilename=prod.mdf;"
        },
        "DebugMode": "disabled",
        "DBAccess": {
          "Administrators": ["Admin-1", "Admin-2"],
          "Users": ["Admin-3", "vendor-3"]
        },
        "FeatureFlags": {
          "Preview": [
            {
              "newUI": "AllAccounts"
            },
            {
              "NewWelcomeMessage": "AllAccounts"
            }
          ]
        }
      }
    }
    '''
    
    

JSON 변수 대체 정보

  • 파일의 중첩된 수준에서 값을 대체하려면 이름을 계층적 순서로 마침표(.)로 연결합니다.

  • JSON 개체는 해당 인덱스로 값을 참조할 수 있는 배열을 포함할 수 있습니다. 예를 들어 위에 표시된 사용자 배열의 첫 번째 값을 대체하려면 변수 이름을 DBAccess.Users.0사용합니다. NewWelcomeMessage에서 값을 업데이트하려면 변수 이름을 FeatureFlags.Preview.1.NewWelcomeMessage사용합니다. 그러나 파일 변환 태스크 에는 JSON 파일의 전체 배열을 변환하는 기능이 있습니다. 또한 DBAccess.Users = ["NewUser1","NewUser2","NewUser3"]을 사용할 수 있습니다.

  • JSON 변수 대체에는 문자열 대체만 지원됩니다.

  • 대체는 UTF-8 및 UTF-16 LE 인코딩된 파일에 대해서만 지원됩니다.

  • 입력한 파일 사양이 파일과 일치하지 않으면 작업이 실패합니다.

  • 변수 이름 일치는 대/소문자를 구분합니다.

  • 변수 대체는 개체 계층 구조에 미리 정의된 JSON 키에만 적용됩니다. 새 키를 만들지 않습니다.

  • 변수 이름에 마침표(".")가 포함된 경우 변환은 계층 내에서 항목을 찾으려고 시도합니다. 예를 들어 변수 이름이 first.second.third면 변환 프로세스에서 다음을 검색합니다.

    "first" : {
      "second": {
        "third" : "value"
      }
    }
    

    뿐만 "first.second.third" : "value"아니라 .