maven - Jenkins:在 Docker 容器中发生 Maven 构建时如何使用 JUnit 插件
问题描述
我正在尝试创建一个管道,Jenkins 在其中构建我的 Docker 映像,运行测试,然后在测试通过时部署容器。问题是我在 docker 容器中运行了 maven,在运行容器之前我实际上无法访问已发布的测试。我希望在测试通过后运行和部署 Docker 容器。这似乎是一件简单的事情,但我想不出一个好的方法来做到这一点。我是不是误会了什么?谢谢。
Dockerfile:
FROM openjdk:10 as step-one
COPY ./ /var/www/java/
WORKDIR /var/www/java
RUN apt-get update -y && apt-get install -y maven
RUN mvn clean package -X
ENTRYPOINT ["java"]
CMD ["-jar", "target/gs-serving-web-content-0.1.0.jar"]
EXPOSE 8080
詹金斯文件:
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building..'
sh 'docker build -t spring-image .'
}
}
stage('Test') {
steps {
echo 'Testing..'
junit '/var/www/java/target/surefire-reports/TEST-ma.SpringTest.xml'
}
}
stage('Deploy') {
steps {
echo 'Deploying....'
sh 'docker run -i -d --name spring-container spring-image'
}
}
}
}
解决方案
junit
您可以在提取测试结果文件以将测试结果复制到您的工作空间之前创建一个临时容器。最后删除它
sh 'docker create --name temporary-container spring-image'
sh 'docker cp temporary-container:/var/www/java/target/surefire-reports .'
sh 'docker rm temporary-container'
junit 'surefire-reports'
您还可以查看docker-pipeline文档,它为您提供了一些抽象来构建 docker 图像
推荐阅读
- c - 强制 gcc 只在一个目录中查找库文件
- javascript - 有任何脚本可以延迟加载所有屏幕外图像吗?
- html - 消息值未显示在 Outlook、html 和打字稿中
- jasmine - 如何多次运行相同的规范?
- reactjs - react-navigation 5.x:TS2345:“...”类型的参数不可分配给“...”类型的参数
- node.js - 嵌套 MongoDB 文档问题(Mongoose 和 Node Js)
- c - 如何检查递归二项式系数算法是否溢出
- refactoring - 将 ST 计算移至子计算
- python - 从 Python 连接到远程桌面上的 MS SQL Server
- c++ - std::vector 未调整大小以在一定数量的条目后容纳更多条目 C++