Jenkins2で標準機能になったPipelineを使って、
Unityの自動テストを複数ブランチで動かして、
結果をgithubに通知するところまでやってみました。
簡単に紹介します。
Jenkinsの環境
UnityがインストールされたmacOS
Jenkinsプラグイン
- NUnit Plugin
- GitHub Plugin
GitHub APIの認証設定
システム設定画面から、
- GitHub → GitHub Server → API URLをhttps://api.github.com
- 高度な設定 → Additional actions → Convert login and password to token
- From login and password → githubのアカウント情報入力
- Create token credentials
これで認証情報が作成されるので、Credentialsで選択。
Test connectionを押して認証できれば設定完了
Jenkinsのジョブの作成
- Multibranch PipelineかPipelineでジョブを作成
- リポジトリの情報を入力
ユニットテスト用のシェルスクリプト作成
Unityのユニットテストをbatchmodeで動かすスクリプトです。
Unityのプロジェクトの場所をhogeとしてます。
作成したスクリプトをルートに設置します。
#!/bin/sh
set -e
UNITY_PATH="/Applications/Unity/Unity.app/Contents/MacOS/Unity"
RESULT_PATH=$(cd $(dirname $0) && pwd)
PROJECT_PATH="${RESULT_PATH}/hoge"
${UNITY_PATH} -quit -batchmode \
-runEditorTests \
-projectPath ${PROJECT_PATH} \
-editorTestsResultFile $RESULT_PATH
テスト結果のコードは
0 - テスト成功
2 - テスト失敗
3 - 失敗
となります
Jenkinsfileの作成
先ほど作成したスクリプトを走らせて、結果を通知します。
ルートにJenkinsfileを作成してgithubにPushします。
#!groovy
node {
stage("SETUP") {
env.WORKSPACE=pwd() + "@script";
}
stage("UNIT TEST") {
dir (env.WORKSPACE) {
result = sh(script: "**/unit_test_run.sh", returnStatus: true)
step[$class: 'NUnitPublisher',
testResultsPattern: '**/EditorTestResults.xml',
debug: false,
keepJUnitReports: true,
skipJUnitArchiver: false,
failIfNoResults: true])
}
}
stage("NOTIFY") {
def state = "ERROR"
switch (result) {
case 0:
state = "SUCCESS"
break
case 2:
state = "FAILURE"
break
default:
break
}
step([$class: 'GitHubCommitStatusSetter',
statusResultSource: [$class: 'ConditionalStatusResultSource',
results: [[$class: 'AnyBuildResult', message: '', state: state]]]])
}
}
returnStatus : trueにすると結果を変数で受け取れるので、
結果のコードからテスト結果をgithubに通知します。
Multibranch Pipelineでジョブを作成すると、
Jenkinsfileが存在するブランチ毎にジョブが作成され、
コミット単位で変更を検知してJenkinsfileの内容を走らせてくれます。
※ブランチが削除されるとジョブも削除されます。
Jenkinsはあまり詳しくないので、
間違いやここをこうしたほうがいい等あればご指摘お願いします。
参考記事
- Jenkins2.0のPipelineを触ってみたら便利だった
- GithubとJenkins Pipelineジョブを連携させる – MAMANのITブログ