Jenkinsfile.docker
2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Docker 环境下的 Jenkins Pipeline 示例
pipeline {
agent any
parameters {
choice(
name: 'DEPLOY_ENV',
choices: ['test', 'uat', 'prod'],
description: '选择部署环境'
)
}
environment {
DEPLOY_ENV = "${params.DEPLOY_ENV ?: 'test'}"
IMAGE_NAME = "api-test"
IMAGE_TAG = "${BUILD_NUMBER}"
WORKSPACE_REPORTS = "${WORKSPACE}/reports"
}
stages {
stage('检出代码') {
steps {
echo "检出代码..."
checkout scm
}
}
stage('构建镜像') {
steps {
echo "构建Docker镜像..."
script {
sh '''
docker build -t ${IMAGE_NAME}:${IMAGE_TAG} .
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest
'''
}
}
}
stage('执行测试') {
steps {
echo "执行API自动化测试 (环境: ${DEPLOY_ENV})..."
script {
sh '''
mkdir -p ${WORKSPACE_REPORTS}
docker run --rm \
-e DEPLOY_ENV=${DEPLOY_ENV} \
-v ${WORKSPACE_REPORTS}:/app \
${IMAGE_NAME}:${IMAGE_TAG}
'''
}
}
}
stage('生成报告') {
steps {
echo "正在生成测试报告..."
script {
sh '''
ls -la ${WORKSPACE_REPORTS}/api_test_report_* 2>/dev/null || echo "未找到报告文件"
'''
}
}
}
stage('发布HTML报告') {
when {
expression {
return fileExists("${WORKSPACE_REPORTS}/api_test_report_api_cases_${DEPLOY_ENV}*.html")
}
}
steps {
echo "发布HTML测试报告..."
publishHTML([
reportDir: 'reports',
reportFiles: "api_test_report_api_cases_${DEPLOY_ENV}*.html",
reportName: "API测试报告-${DEPLOY_ENV}环境",
keepAll: true,
alwaysLinkToLastBuild: true
])
}
}
}
post {
always {
echo "清理工作环境..."
script {
sh '''
docker container prune -f
echo "========== 镜像列表 =========="
docker images | grep ${IMAGE_NAME}
'''
}
}
success {
echo "✅ [${DEPLOY_ENV}环境] 所有测试用例运行成功!"
}
failure {
echo "❌ [${DEPLOY_ENV}环境] 有测试用例执行失败!"
}
}
}