image
image

案例:过三关程序编译上传docker

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
pipeline {
agent any
parameters {
string defaultValue: '', description: 'Image的版本号', name: 'dockerVersion', trim: true
string defaultValue: '', description: 'teamfort_checkpoint的版本号', name: 'teamfortCheckpointVersion', trim: true
booleanParam defaultValue: true, description: '编译teamfort_checkpoint', name: 'teamfortCheckpointBol'
booleanParam defaultValue: true, description: 'docker上传私有库', name: 'dockerUpload'
}
environment{
//maven安装定义的maven名称
mvnHome = tool 'maven3.5.4'
// 清除本地images
imageRm = '''docker rmi -f $(docker images | grep dgemc.asuscomm.com:9293/checkpoint/teamfort_checkpoint_first | awk '{print $3}')'''
// docker的编译名称和版本号
dockerImage = "dgemc.asuscomm.com:9293/checkpoint/teamfort_checkpoint_first:${dockerVersion}"
// dockerFile目录位置
dockerFilePath = "/home/dockerSH/otherTeamfort_checkpoint"

// 编译teamfort_checkpoint
dockerBuild = "cd ${dockerFilePath} \n"+
"docker build -t teamfort_checkpoint:${teamfortCheckpointVersion} . \n"

}
stages{
stage('Checkout'){
steps{
script{
if("${dockerUpload}" == 'false'){
echo '跳过拉取代码'
return
}
echo '拉取代码'
checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: '192.168.18.241', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'http://192.168.18.241/svn/dev/teamfort_checkpoint_First']], quietOperation: true, workspaceUpdater: [$class: 'CheckoutUpdater']])
}

}
}

stage('Maven-Build'){
steps{
script{
if("${dockerUpload}" == 'false'){
echo '跳过Maven打包 '
return
}
echo '编译'
sh "${mvnHome}/bin/mvn clean package -DskipTests"
}

}
}

stage('Docker-push'){
steps{
script{
if("${dockerUpload}" == 'false'){
echo '跳过上传私有库'
return
}
echo '上传到docker私有库'
sh "docker build -t ${dockerImage} ."
// 上传到镜像仓库
sh "docker push ${dockerImage}"
// 删除本地teamfort_checkpoint_first镜像
sh "${imageRm}"
}

}
}

stage('Ssh-docker-Build'){
steps{
echo '服务器docker编译'
script {
if("$teamfortCheckpointBol" == 'false'){
echo '跳过docker-build'
return
}
sh '''
echo \'FROM dockerImage
ENV configureBol=false
ENV wechat-redirectUri=serv.thenewway.cn
ENV db-ip=120.79.114.225
ENV auth-Url=
EXPOSE 8383
\' >Dockerfile
'''
//替换字符
sh "sed -i 's#dockerImage#${dockerImage}#' Dockerfile "
sshPublisher(publishers: [sshPublisherDesc(configName: '芦苇', transfers: [sshTransfer(excludes: '', execCommand: "${dockerBuild}"
, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${dockerFilePath}", remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

sh '''
echo \'FROM dockerImage
ENV configureBol=false
ENV wechat-redirectUri=serv.teamfort.cn
ENV db-ip=120.79.114.225
ENV auth-Url=
EXPOSE 8383
\' >Dockerfile
'''
//替换字符(#号避免地址/问题)
sh "sed -i 's#dockerImage#${dockerImage}#' Dockerfile "
sshPublisher(publishers: [sshPublisherDesc(configName: '120.79.114.225', transfers: [sshTransfer(excludes: '', execCommand: "${dockerBuild}"
, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${dockerFilePath}", remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

sh '''
echo \'FROM dockerImage
ENV configureBol=true
ENV wechat-redirectUri=serv.teamfort.cn
ENV db-ip=120.79.114.225
ENV auth-Url=
EXPOSE 8383
\' >Dockerfile
'''
//替换字符(#号避免地址/问题)
sh "sed -i 's#dockerImage#${dockerImage}#' Dockerfile "
sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.18.211', transfers: [sshTransfer(excludes: '', execCommand: "${dockerBuild}"
, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "${dockerFilePath}", remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])


}
}
}
}
}