Jenkins 部署docker容器步骤(无镜像仓库)
- 创建一个流水线项目
- 编写流水线脚本
- 拉取代码
- 项目打包
- 删除原镜像
- 发送到服务器打包成docker镜像
- 部署镜像
- 完成构建
一、创建一个流水线项目
1.1流水线pipeline
- 流水线既能作为任务的本身,也能作为Jenkinsfile
- 使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发Jenkinswebui不能完成的更复杂的构建逻辑,作为开发者可读性也更好。
- 5个必备的组成部分如下
- pipeline:整条流水线
- agent:指定执行器
- stages:所有阶段
- stage:某一阶段,可有多个
- steps:阶段内的每一步,可执行命令
1.2 新建项目
- 输入用户名
- 选择流水线
- 点击确定

1.3 创建流水线脚本

二、编写流水线脚本
2.1拉取代码
stages{
stage("拉取代码")拉取代码{
steps{
git credentialsId: '129d8965-4f3d-4ca6-a493-96b58a79e076', url: 'https://gitee.com/zhuchen888/72crm-9.0-JAVA.git'
echo '拉取代码成功'
}
}
}
2.2 项目打包
stage('run build') {
steps {
// 看你xml文件是否在最外边,否则就要用三个双引号的多行sh命令
sh "mvn package -Dmaven.test.skip=true"
echo 'build success'
}
}
2.3 删除原镜像
sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.150.135', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''docker stop crm
docker rm crm
docker rmi crm''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
2.4 发送到服务器打包成docker镜像
stage("send jar to test server"){
steps{
sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.150.135', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /application
docker build -t crm .
docker run -d -p 8080:8080 --name crm
''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/application', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/ROOT.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo "发送完成"
}
}
2.5 完整的脚本
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
git credentialsId: '129d8965-4f3d-4ca6-a493-96b58a79e076', url: 'https://gitee.com/zhuchen888/72crm-9.0-JAVA.git'
echo '拉取代码成功'
}
}
stage('run build') {
steps {
// sh "mvn --version"
// 看你xml文件是否在最外边,否则就要用三个双引号的多行sh命令
sh "mvn package -Dmaven.test.skip=true"
echo 'build success'
}
}
stage('clean test server'){
steps{
sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.150.135', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''
rm -rf /application/ROOT.war
docker stop crm
docker rm crm
docker rmi crm''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
stage('send jar to test server') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.150.135', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /application
docker build -t crm .
docker run -d -p 8080:8080 crm
''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/application', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/ROOT.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo "发送完成"
echo 'jar send over'
}
}
}
}
三、构建测试任务
- 点击构建

- 构建完成后查看是否传送了jar包
- 查看是否构建了新的镜像
- 查看是否运行了容器
- 访问crm系统,看是否正常运行