筆者的 Jenkins 是部屬在 Docker 上,不像其他大多數範例是放在 Windows 中。好在自 DotNet Core 之後到現在的 DotNet 就是跨平台,雖然在 Linux 中還是偶爾會遇到一點小挑戰,不過要能夠正常運作還真不是什麼問題。
簡單來說就是使用 dotnet sdk 的 Docker ,在內部執行測試,跑完後再將測試報告塞給外部的 Jenkins 匯入。
執行測試時就可以產出 nunit xml 的報表(不然只能 trx;LogFileName=TestResult.trx),方便 Jenkins 的 NUnit 套件讀取
最簡單 Dockerfile 範例:
最簡單 Jenkinsfile 範例:
如此如此,就可以在 Jenkins 中看到包含成功和失敗的測試結果了!
參考資料:
Microsoft - dotnet test
Jenkins plugins - NUnit
簡單來說就是使用 dotnet sdk 的 Docker ,在內部執行測試,跑完後再將測試報告塞給外部的 Jenkins 匯入。
NUnit
先使用 NuGet 安裝 Swashbuckle.AspNetCore 套件,或是使用 .NET CLI 執行以下指令安裝
dotnet add package NunitXml.TestLogger
執行測試時就可以產出 nunit xml 的報表(不然只能 trx;LogFileName=TestResult.trx),方便 Jenkins 的 NUnit 套件讀取
dotnet test --logger "nunit;LogFileName=TestResult.xml" --results-directory /test_results
最簡單 Dockerfile 範例:
FROM mcr.microsoft.com/dotnet/sdk:6.0
WORKDIR /app
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet test --logger "nunit;LogFileName=TestResult.xml" --results-directory /test_results || true
ENTRYPOINT ["tail", "-f", "/dev/null"]
Jenkins
在 Jenkins 中安裝 NUnit 套件,然後使用 pipeline,撰寫 Jenkinsfile最簡單 Jenkinsfile 範例:
pipeline {
agent any
environment {
DOCKER_IMAGE = "my_image"
BUILD_NUMBER = "0.0.1"
DOCKER_CONTAINER = "my_container"
}
stages {
stage('Get commit details') {
steps {
script {
env.GIT_COMMIT_MSG = sh (script: 'git log -1 --pretty=%B ${GIT_COMMIT}', returnStdout: true).trim()
env.GIT_AUTHOR = sh (script: 'git log -1 --pretty=%cn ${GIT_COMMIT}', returnStdout: true).trim()
}
}
}
stage('Build and Test')
{
steps {
sh 'docker build -t ${DOCKER_IMAGE}:${BUILD_NUMBER} .'
sh 'docker run -d --name ${DOCKER_CONTAINER} ${DOCKER_IMAGE}:${BUILD_NUMBER}'
sh 'mkdir -p test_results'
sh 'docker cp ${DOCKER_CONTAINER}:/test_results/TestResult.xml ./test_results/TestResult.xml'
sh 'docker stop ${DOCKER_CONTAINER}'
sh 'docker rm -f ${DOCKER_CONTAINER} || true'
sh 'docker rmi ${DOCKER_IMAGE}:${BUILD_NUMBER} || true'
}
}
}
post {
always {
nunit testResultsPattern: 'test_results/TestResult.xml'
}
}
}
如此如此,就可以在 Jenkins 中看到包含成功和失敗的測試結果了!
參考資料:
Microsoft - dotnet test
Jenkins plugins - NUnit
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com