淘先锋技术网

首页 1 2 3 4 5 6 7

jenkins部署springboot项目

1、创建一个项目 上传到gitee

1、创建项目
image-20230703173308740
2、上传到git
image-20230703173344271

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 这种方法)。
      image-20230411151130644
      流水线项目配置:
      image-20230703173424199

3、自动化构建配置

1、项目结构
image-20230703173618232
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:$PATH
            mvn 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、构建结果
image-20230416233628506
5、上面的脚本存在问题、没有删除容器、删除镜像
我们写一个shell脚本、判断是这个容器是否存在、如果存在关闭容器、删除容器、删除镜像、重新构建

#!/bin/bash
# 容器名称
container_name="你的容器"

# 镜像名称
image_name="你的镜像名字"

# 判断容器是否存在
if docker ps -a --format "{{.Names}}" | grep -q "$container_name"; then
  echo "容器 $container_name 存在"
  
  # 关闭容器
  echo "关闭容器 $container_name"
  docker stop $container_name
  
  # 删除容器
  echo "删除容器 $container_name"
  docker rm $container_name
else
  echo "容器 $container_name 不存在"
fi

# 删除镜像
if docker images --format "{{.Repository}}" | grep -q "$image_name"; then
  echo "镜像 $image_name 存在"
  
  echo "删除镜像 $image_name"
  docker rmi $image_name
else
  echo "镜像 $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.sh
	      sh docker.sh"""
}