はんなりと、ゆるやかに

アジャイル、スクラムが好きが日々から学んだことをアウトプット

CircleCI ルートディレクトリと異なるディレクトリでビルドする

はじめに

CircleCIでルートディレクトリと異なるディレクトリでビルドする方法が分からず、調べたのでまとめました。知っていれば簡単です。ビルドステップの設定時に対象ディレクトリを指定するだけでした。
circleci.com

ディレクトリ構成

以下の構成で確認しました。ルートディレクトリの下に「src」ディレクトリ、「src」ディレクトリ内にビルド対象のファイルがあります。
f:id:iucstscui:20200314003805p:plain

エラー発生時のCircleCIの設定

 version: 2.1

 orbs:
  win: circleci/windows@2.2.0

 jobs:
   build:
     executor: win/default     
    
     steps:
       - checkout
       - run: dotnet build

上記の設定ではルートディレクトリでビルドしようとして、以下のエラーが発生します。

MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.

現在のディレクトリにslnファイルやプロジェクトファイルが見つからなかった旨のエラーです。
解決方法は2種類ありました。

解決1:runステップにworking_directory を設定する

run ステップは実行ディレクトリを指定できます。
circleci.com

# stepsの部分だけ抜粋
     steps:
       - checkout
       - run: 
           working_directory: src
           command: dotnet build 

runステップが実行されるときは「src」ディレクトリで実行されます

解決2:dotnet build コマンドの引数にslnファイルのパスを渡す

dotnet build コマンドは引数にビルドするslnフィルを渡せます。
docs.microsoft.com

# stepsの部分だけ抜粋
     steps:
       - checkout
       - run: dotnet build src\FizzBuzz.sln

runステップが実行されるときはルートディレクトリで実行されますが、dotnet buildは指定されたslnファイルがビルドされます。

さいごに

  • runステップにworking_directoryを設定して実行ディレクトリが変更できます
  • working_directoryの設定はビルドに関わらず応用が利きます