私はこれがgitlab-ciの問題ではないと思います。使用しているランナーに関連付けられているサーバー(またはコンテナ内)にMSBuildコマンドを実行することに、デバッグ作業を集中させます。
before_script
を使用して、がパイプラインで必要とされる依存関係を確認するスクリプトを呼び出すことをお勧めします。たとえば、ビルド前のスクリプトは、MSBuild、NuGet、およびGitがランナー/ VM /コンテナのパス上にあることを確認できます(パイプライン内で管理するのではなく、PuppetまたはPowershell DSCを使用してこれらの前提条件を制御できます)。
nuget restore
は、before_script
ではなくrestore
ステージの一部として呼び出す必要があります。復元されたパッケージは、ステージ間でアーティファクトとして渡すことができます。
あなたは、二重引用符あなたbuild
ジョブ内のMSBuildのあなたの呼び出しです。ここで私は私が現在働いているパイプラインでのMSBuildを呼び出しています方法は次のとおりです。
このシナリオでは
build_dev: stage: build script: - MSBuild $env:TARGETS /t:Build /p:Configuration=Debug artifacts: paths: - ./*/bin <<: *default_expiration <<: *default_tags
、私before_script
はMSBuild
がパス上にあるので、私はそれを使用して自由だということを確認しました。ランナーに応じて、MSBuild 12.0または14.0を参照することがあります。 $env:TARGETS
はgitlab-ci変数からのものです。 MSBuildファイルbuild.targets
を指しています。
私はあなたが基本的なshell
executorを使用していると考えています。あなたのランナー設定でshell = powershell
を指定するといくつかのことがより簡単になりますが、Powershellの構文は、パイプラインをつなぎ合わせる際のフラットアウトに優れています。
最後に、MSBuildのは、自動的にNuGetの依存関係を復元するかどうか本当にあなたの.csproj
ファイルが書き込まれる方法次第です。私は別のステップとしてnuget restore
を持つことが最善であると主張します。たとえば、MSBuild自体で使用されているNugetパッケージを復元する必要がある場合は、別の手順が必要になります。
は、単にあなたのソリューションファイルに対してMSBuildのを実行すると、自動的にコマンドラインでMSBuildのを自分で実行することにより、NuGetパッケージを復元することを確認します。私はgitlab-ciがそのコマンドの成功に影響を与えるとは思わない。
私はこの質問を投稿して以来、新しいノートパソコンを使用しているので、ほとんどのCI /ランナーステップをやり直さなければなりませんでした。 これらのスクリプトがどのように動作するのかわかりません。cmdでMSbuildを実行しようとしましたが、ソリューションのフォルダーやMSbuildフォルダーでは実行されません。私はMSbuildが実際にスクリプトの上に現れていることを確認しました。 私はymlとあなたの提案を乱し、CIでymlエラーが発生しました。 私はどこから始めるか/修正するか分からない。 – Kir