ラボ管理と標準環境でセキュリティの問題が発生しています。
ドメイン「DevDomain」に TFS2012 update 2 をインストールしました。同じコレクション「CollectionA」のビルドコントローラー、ビルドエージェント、およびテストコントローラーの両方がインストールされている「DevDomain」にも別のビルド/ラボマシンがあります。
自動ビルドは完璧に機能します。
「DevDomain」と「TestDomain」に展開対象の PC があります (詳細は後述)。
これを次のレベルに進めるために、TFS ビルド エージェントで構築されたソフトウェアをテスト リグ マシンに自動的に展開したいと考えています。具体的には、展開スクリプトで既存の製品をアンインストールし、更新されたインストーラーをターゲット PC にコピーしてからインストールしたいと考えています。
私の最初の試みは、「DevDomain」で標準環境を定義し、同じドメイン内で動作するラボ ビルドの展開部分を取得することでした。
これはうまくいきました。これが私がしたことです。
自動ビルド (DefaultTemplate.xaml プロセスを使用) により、展開に使用する MSI ファイルと、展開を調整するために実行する PowerShell スクリプトが作成されます。(スクリプトは、msiexec を介して MSI を実行してアンインストールし、新しいバージョンをローカルにコピーしてから、msiexec を介して実行して新しいコピーをインストールしようとするだけです)。自動化されたビルドは、これらの両方のアーティファクトを喜んで作成し、定義された TFS ドロップ シェアに配置します。
これを行うために、私は持っています:
- 1 台のマシン (デスクトップ クライアント ロール) で新しい標準ラボ環境を作成
- ラボ マネージャーはエージェントをこの PC に正常に展開しました
- エージェントはインタラクティブに実行されており、オンラインを示しています。
- LabDefaultTemplate.11.xaml ワークフローを使用して新しいビルド定義を作成しました。
- 構成で上記のラボを参照
- 構成で自動ビルドの最新の出力を参照しました
- ビルド出力の PowerShell スクリプトを指定しました ($(BuildLocation) マクロを使用)。
ビルドのこの [デプロイ] タブでは、"デスクトップ クライアント" ロールを使用してラボのマシンで実行する次のスクリプトを指定します。
cmd /c powershell.exe "$(BuildLocation)\DeployGuiToLabWorkstation.ps1" "$(BuildLocation)"
これは機能します。
テスト エージェントをインタラクティブなプロセスとして実行するように構成していることに注意してください。展開が機能した後の最終的な目的は、これらのラボでコード化された UI テストを実行することです。
問題は、別のドメインのマシンに展開しようとしたときに発生します 。これをより現実的なものにするために、別のドメインにある QA マシン用の標準的なラボ環境を定義する必要があります。「テストドメイン」。
ドメイン「TestDomain」はドメイン「DevDomain」と信頼関係があります。「DevDomain」と「TestDomain」の間に相互信頼はありません
ここでも、テスト マネージャー ラボ センターがこの OK を定義し、エージェントをデプロイしました。エージェントは、自分自身をオンラインでテスト コントローラーに報告しました。
新しい標準環境 (「TestDomain」上) を参照するようにラボ ビルドを変更すると、デプロイはこのエラーで失敗します。
Exception Message: Team Foundation Server could not complete the deployment task for
machine '10.7.70.71', script 'cmd' and arguments '/c copy \\*buildmachine*
\TFS_Drop\...\DeployGuiToWorkstation.ps1 C:\GuiDeploy'. (type LabDeploymentProcessException)
これを診断するために、ラボのデプロイ スクリプトを次のように変更しました。
"cmd /c powershell whoami"
また、ログによると、プロセスはテスト エージェント用に指定されたラボ環境のアカウントではなく、"nt authority\system" として実行されています。
これはスクリプト エラーを説明しています。ターゲット PC の PowerShell は TFS ドロップ共有にアクセスできませんが、このアカウントはローカル マシン アカウントであるため、「TestDomain」の PC のマシン アカウントに、「DevDomain」のマシンの共有と NTFS フォルダーへのアクセス許可を付与することはできません。
では、「devDomain」共有/ファイルシステムのアクセス許可を「TestDomain」のマシンから「System」サービス アカウントに付与するにはどうすればよいでしょうか。
また
テスト エージェント (ローカル マシンの管理者として実行) に、このマシンのシステム コンテキストではなく、独自のアカウント コンテキストで展開スクリプトを実行させるにはどうすればよいですか?
私は困惑しています!
編集: テスト エージェントの UI は指定したアカウントで実行されているようですが、そのように構成すると、サービス "Visual Studio Lab Agent Service" がローカル システムとして実行されたままになり、サービスでこれを手動で変更できます。適切なドメイン アカウントとそのアカウントが PS "whoami" の結果に反映されます。
現在、「DevDomain」アカウントをミラーリングするサービスに TestDomain アカウントを使用して調査しているため、共有権限を適切に設定できます。
これはTFS ラボ管理展開スクリプトと同様のシナリオですが、テストとテスト設定を使用して回避されたため、特に展開部分の解決が必要であり、質問する価値があると思いました。