jenkins部署springboot项目
1、创建一个项目 上传到gitee
1、创建项目
2、上传到git
2、jenkins创建一个pipeline项目
Pipeline简介
1)概念
Pipeline,简单来说,一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点 的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
2)使用Pipeline有以下好处:
代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流 程。
持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。
可停止:Pipeline可接 收交互式输入,以确定是否继续执行Pipeline。
多功能:Pipeline支持现实世界中复杂的持续交付要 求。它支持fork/join、循环执行,并行执行任务的功能。
可扩展:Pipeline插件支持其DSL的自定义扩 展 ,以及与其他插件集成的多个选项。
3)如何创建 Jenkins Pipeline呢?
- Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
- Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
- Pipeline 也有两种创建方法:
- 可以直接在 Jenkins 的 Web UI 界面中输入脚本;
- 也可以通过创建一 个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM) 中直接载入 Jenkinsfile Pipeline 这种方法)。
流水线项目配置:
3、自动化构建配置
1、项目结构
2、流水线文件详情:
关于流水线语法直接省略、大家也没有必要 去了解和掌握、复制下面的即可
def project_name='jenkins01'
def tag = "latest"// 执行脚本
node {stage('拉取代码') {git credentialsId: 'be908ce3-b7d6-425f-b76a-e580044axxxx', url: 'https://gitee.com/xxx/demo_jenkins.git'}stage('工程编译'){//编译,构建sh """PATH=/usr/localhost/mavenxxx/bin:$PATHmvn clean package -Dmaven.test.skip=true"""}stage('镜像打包'){// 镜像打包sh 'pwd'sh 'docker build -t jenkins01:latest .'}stage('docker的部署'){//镜像名称def imageName = "${project_name}:${tag}"//删除原有容器 sh "docker rm -f ${project_name}"//容器加一层挂载目录 启动容器sh "docker run -id --name ${project_name} -p 9000:9000 ${imageName}"}
}
3、dockerFile文件
#FROM java:8
FROM openjdk:8
COPY ./target/demo_jenkins-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 9000
ENTRYPOINT ["java","-jar","/app.jar"]
4、构建结果
5、上面的脚本存在问题、没有删除容器、删除镜像
我们写一个shell脚本、判断是这个容器是否存在、如果存在关闭容器、删除容器、删除镜像、重新构建
#!/bin/bash
# 容器名称
container_name="你的容器"# 镜像名称
image_name="你的镜像名字"# 判断容器是否存在
if docker ps -a --format "{{.Names}}" | grep -q "$container_name"; thenecho "容器 $container_name 存在"# 关闭容器echo "关闭容器 $container_name"docker stop $container_name# 删除容器echo "删除容器 $container_name"docker rm $container_name
elseecho "容器 $container_name 不存在"
fi# 删除镜像
if docker images --format "{{.Repository}}" | grep -q "$image_name"; thenecho "镜像 $image_name 存在"echo "删除镜像 $image_name"docker rmi $image_name
elseecho "镜像 $image_name 不存在"
fi# 重新构建镜像
echo "重新构建镜像 $image_name"
docker build -t $image_name .# 启动容器
echo "启动容器 $container_name"
docker run -id --name $container_name -p 9000:9000 $image_name
执行shell脚本:
stage('执行shell命令-镜像打包'){sh """chmod +x ./docker.shsh docker.sh"""
}