2016-06-27 5 views
2

たとえば、文字列を %teamcity.agent.work.dir%\\nd_r\\bin\\isfに置き換える必要がある場合などです。しかし、変数teamcity.agent.work.dirC:\BuildAgent\work\の場合、バックスラッシュをすべて削除し、テキストをC:BuildAgentwork\nd_r\bin\isfに置き換えます。ファイルコンテンツの代替変数でバックスラッシュをエスケープする方法代替チームチーム

どのように私は変数の中ですべてのバックスラッシュをエスケープすることができます、私は最初の値について知らないのですか?

\ Q%env.NDRIVE%\ E \ nd_r \ bin \ isf - 動作しません。

答えて

0

の所定のセットのためのエスケープ値を提供するTeamCity pluginを書き込み、ファイルコンテンツ代用は(grep -Fのと同様の)固定されたストリング・モードで実行することができ、オリジナルの正規表現モードではなく:あなたは012を使用している場合

File Content Replacer in FIXED_STRINGS mode

REGEXFIXED_STRINGSに加えて)さらに別のモードがあります:REGEX_MIXEDです。このモードでは、検索パターンは引き続き正規表現として解釈されますが、置換テキストはquotedとなり、\$の文字は特別な意味を持たなくなります。

あなたはKotlinに設定をエクスポートする場合は、サンプルファイル内容代用設定は次のようになります。

features { 
    replaceContent { 
     fileRules = "**/*" 
     pattern = "(?iu)the\h+pattern\h+to\h+search\h+for" 
     regexMode = FileContentReplacer.RegexMode.REGEX_MIXED 
     replacement = """%teamcity.agent.work.dir%\nd_r\bin\isf""" 
    } 
} 
3

TeamCityでは、%-referencesの値の追加処理はサポートされていませんが、そのまま使用することができます。あなたのケースでは

、可能な回避策は以下のとおりです。必要に応じて

  • は、ファイルのコンテンツの代用品を使用して、エスケープ処理を扱うことができるスクリプトでビルドする最初のステップとして、関連するロジックを実行しません。
  • 値とsupplyを既にエスケープされた形式のパラメータとしてTeamCityにエスケープします。ビルドステップの前にファイルコンテンツの置換えが機能するので、これはビルドチェーンの以前のビルドとチェーンのビルドのパラメータcan be usedで行うことができます。
  • チームシティー2017.1のでパラメータ
0

あり、別の解決策があるが、それはハックのビットです。 2つの別々のファイルコンテンツの置き換えを行うだけで、2段階で置き換えを行うだけです。

  • 最初のものは正規表現マッチャーである必要があります。正規表現パターンを使用して置換する文字列を見つけ、固定された既知の文字列(GUID、または一意のマジック文字列)で置き換えます。
  • 2番目のファイルコンテンツの置換えは同じファイルに一致しますが、固定ストリング・マッチャーを使用し、最初のステップの固定ストリングをパラメーター値で置き換えます。これは固定ストリング・マッチャーなので、パラメーター値のバックスラッシュは保持されます。
  • このアプローチの唯一の小さな問題は、チームシティーがビルド機能の並べ替えを許可しないことです。これは、実行順序が保証されない可能性があることを示しています。しかしこれまでのところ私のために働いています。