Jenkins使用git和maven编写流水线

1、写git流水线

初识流水线。从git上拉取代码到虚拟机。

【第一步:创建一个新的流水线】

【第二步:定义名字】

点击下方ok!

【第三步:添加代码描述】

【第四步:编写流水线代码,如果忘记了,参照第五步】

【第五步:自动生成流水线代码--写入第四步中】

#上面的操作生成出来的代码:
node {
    git branch: 'develop', credentialsId: '9a19cd80-bb02-4e8b-b126-f023bdebea7b', url: 'https://gitee.com/wztsl/dz12-demo01.git'
}

【第六步:保存流水线代码】

【第七步:测试流水线代码是否有错】

【第八步:查看代码】

2、写maven流水线

目的:拉取最新代码,将代码打包好,做成镜像,上传到docker中,然后启动容器,外部可以访问。

  • 通过git拉取代码

  • 用Dockerfile检查是否存在容器和镜像,如果存在则删除

  • 编译,打包

  • 创建docker镜像

  • 启动docker容器

    第一段流水线:git拉取代码

【一步一步测试流水线代码:】

node {
    stage('pull code'){
       git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'
    }
}

【然后一步一步run测试结果:】

2.第二段流水线:将下载的项目进行打包

node {
    stage('compile'){
#jenkinsDemo1的名字一定要是虚拟机里 /var/lib/jenkins/workspace 路径下存在的。该流水线的目的在于打包该项目。
        dir('/var/lib/jenkins/workspace/jenkinsDemo1'){   
            sh 'mvn clean install'
        }
    }
}

3.第三段流水线:将打包后的项目做成docker镜像

【以上操作,完成第二段流水线就可以实现】

【注意:停掉服务后,删除掉workspace目录下的该项目,希望通过流水线来实现效果。】

【流水线代码如下:】

checkout=0
node {
    stage('pull code'){
       git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'
    }
    stage('compile'){
        dir('/var/lib/jenkins/workspace/jenkinsDemo1'){   
            sh 'mvn clean install'
        }
    }
    stage('make docker container'){
        dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){
            sh "echo FROM openjdk:8 > Dockerfile"
            sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"
            sh "echo RUN bash -c '\"'touch /app.jar'\"' >> Dockerfile"
            sh "echo ENTRYPOINT ['\"'java'\"','\"'-jar'\"','\"'/app.jar'\"'] >> Dockerfile"
            sh "echo  RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"
            sh "docker build -t jenkinsdemo1 ."    
        }
    }
}
## 注意注意:docker build -t jenkinsdemo1 . 命令中的镜像名不能有大写字母。

 

#创建容器并运行,d1是容器名,
docker run --name d1 -p 8888:8888 -d jenkinsdemo1

4.第四段流水线:通过镜像创建容器并启动

checkout=0
node {
    stage('pull code'){
       git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'
    }
    stage('check docker container'){
        if(fileExists('/var/lib/jenkins/workspace/jenkinsDemo1/target/Dockerfile')){
            sh 'docker stop d1'
            sh 'docker rm d1'
            sh 'docker rmi jenkinsdemo1'
        }
    }
    stage('compile'){
        dir('/var/lib/jenkins/workspace/jenkinsDemo1'){   
            sh 'mvn clean install'
        }
    }
    stage('make docker container'){
        dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){
            sh "echo FROM openjdk:8 > Dockerfile"
            sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"
            sh "echo RUN bash -c '\"'touch /app.jar'\"' >> Dockerfile"
            sh "echo ENTRYPOINT ['\"'java'\"','\"'-jar'\"','\"'/app.jar'\"'] >> Dockerfile"
            sh "echo  RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"
            sh "docker build -t jenkinsdemo1 ."    
        }
    }
    stage('start'){
        sh 'docker run --name d1 -p 8888:8888 -d jenkinsdemo1'
    }
}

注意:/var/lib/jenkins/workspace/jenkinsDemo1    “jenkinsDemo1”是项目名,可以有大写字母
     docker rmi jenkinsdemo1   jenkinsdemo1 是镜像名,不可以有大写字母

node:节点,Jenkins支持分布式,可以给节点命名,master是主节点,不要修改。

stage:声明步骤

fileExists:判断文件是否存在

dir:进入某个目录

5.第五段流水线:删除已存在的容器和镜像

checkout是用于判断是否存在镜像和容器的标识,上面的流水线中并未操作它,不声明也不会报错。但是,如果在mvn install时报错,会导致流水线不继续运行,就不会生成Dockerfile文件,那么再次执行流水线时,还是会因为已经有了d1这个容器而启动报错。

研究用什么办法解决这个问题?

1.手动操作解决方式

2.流水线代码解决方式

checkout=0
node {
    stage('pull code'){
       git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'
    }
    stage('check docker container'){
       script{
          checkout=sh(
                script: 'docker ps | grep d1',
                returnStatus: true
          )
      }    
    }
    stage('compile'){
        dir('/var/lib/jenkins/workspace/jenkinsDemo1'){   
            sh 'mvn clean install'
        }
    }

    stage('remove docker container'){
        if(checkout==0){
            sh 'docker stop d1'
            sh 'docker rm d1'
            sh 'docker rmi jenkinsdemo1'
        }
    }

    stage('make docker container'){
        dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){
            sh "echo FROM openjdk:8 > Dockerfile"
            sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"
            sh "echo RUN bash -c '\"'touch /app.jar'\"' >> Dockerfile"
            sh "echo ENTRYPOINT ['\"'java'\"','\"'-jar'\"','\"'/app.jar'\"'] >> Dockerfile"
            sh "echo  RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"
            sh "docker build -t jenkinsdemo1 ."    
        }
    }
    stage('start'){
        sh 'docker run --name d1 -p 8888:8888 -d jenkinsdemo1'
    }
}

说明:

git拉起代码:第一步

打包代码:第三步

把打包后的代码做成镜像:第五步

通过镜像创建容器并运行:第六步

检查是否有容器和镜像存在:第二步

删除已存在的容器和镜像:第四步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/54753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop安装与配置

一、Hadoop安装与配置 1、解压Hadoop安装包 找到hadoop-2.6.0.tar.gz,将其复到master0节点的”/home/csu”目录内,解压hadoop [csumaster0 ~]$ tar -zxvf ~/hadoop-2.6.0.tar.gz 解压成成功后自动在csu目录下创建hadoop-2.6.0子目录,可以用cd hadoo…

【含文档】基于Springboot+微信小程序 的高校二手商品交易平台(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

【数据仓库】数据仓库层次化设计

一、基本概念 **1. RDS(RAW DATA STORES,原始数据存储)** RDS作为原始数据存储层,用于存储来自各种源头的未经处理的数据。这些数据可能来自企业内部的业务系统、外部数据源或各种传感器等。RDS确保原始数据的完整性和可访问性&…

Python通过Sqlalchemy框架实现增删改查

目录 简介 什么是SQLAlchemy? SQLAlchemy可以分为两个部分:Core和ORM。 一、首先安装sqlalchemy 二、在配置文件中添加数据库连接信息,我这里是Mysql 三、 创建数据库连接类,我这里是动态读取数据库的表字段,自动…

Java数据库连接jdbc

Java数据库连接jdbc 导入java包 1、根目录,新建一个lib目录(Dire) 2、将jar包放入lib目录下 3、File -> Project Structure(项目结构) 4、Libraries-> ->java->找到项目的lib目录 5、Apply->OK使用JD…

基于python+django+vue的旅游景点数据分析系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

网安面试会问到的:http的长连接和短连接

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

华为HarmonyOS地图服务 4 - 通过“地图相机“控制地图的可见区域

场景介绍 华为地图的移动是通过模拟相机移动的方式实现的,您可以通过改变相机位置,来控制地图的可见区域,效果如图所示。 本章节将向您介绍相机的各个属性与含义,并移动相机。 相机移动前 …

开源PHP导航网源码/精美简约网址导航收录网站/QQ技术导航程序

源码简介: 一款给力的开源PHP导航网源码,它不仅外观精美简约,还是个网址导航收录网站/QQ技术导航程序哦! 在信息爆炸的时代,找网页就像大海捞针一样难。但是有了像PHP 导航网这样的神器,一切都变得简单了…

One API本地开发环境搭建

One API本地开发环境搭建 简介 摘要 : 本文介绍如何在本地搭建 One API 开发环境,包括安装 Go 语言和 GoLand IDE,以及如何新建项目和配置数据库信息。通过简明的步骤说明,帮助开发者快速完成基本的开发环境配置,方…

STM32与51单片机的区别:是否应该直接学习STM32?

STM32与51单片机的区别:是否应该直接学习STM32? 在单片机的世界里,STM32和51单片机都是非常重要的角色。对于初学者来说,是否可以直接跳过51单片机,直接学习STM32,这个问题一直存在争议。让我们深入探讨这…

Vue:默认插槽

目录 一.性质 1.内容分发 2.无名称标识 3.作用域 4.使用方式 二.使用 1.父组件 2.子组件 三.代码 1.父组件代码 2.子组件代码 四.效果 一.性质 1.内容分发 默认插槽允许组件的使用者定义一些内容,这些内容会被插入到组件模板中的特定位置。这有助于实…

TomCat乱码问题

TomCat控制台乱码问题 乱码问题解决: 响应乱码问题 向客户端响应数据: package Servlet;import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servl…

【HTTP】方法(method)以及 GET 和 POST 的区别

文章目录 方法(method)登录上传GET 和 POST 有什么区别(面试)区别不准确的说法 方法(method) 首行中的第一部分。首行是由方法、URL 和版本号组成 方法描述了这次请求想干什么,最主要的是&…

Unity3D入门(一) : 第一个Unity3D项目,实现矩形自动旋转,并导出到Android运行

1. Unity3D介绍 Unity3D是虚拟现实行业中,使用率较高的一款软件。 它有着强大的功能,是让玩家轻松创建三维视频游戏、建筑可视化、实时三维动画等互动内容的多平台、综合型 虚拟现实开发工具。是一个全面整合的专业引擎。 2. Unity安装 官网 : Unity…

苹果macOS 15.0 Sequoia正式版发布:iPhone应用镜像玩、手机消息电脑知

9月17日苹果向 Mac 电脑用户推送了 macOS 15 更新(内部版本号:24A335),除了引入数个 iOS 18 的新功能外,macOS 15 Sequoia 还带来了全新的 Continuity 功能 ——iPhone 镜像。 iPhone 镜像功能可以让用户直接在 Mac 上…

Ubuntu 安装和使用 Fcitx 中文输入法;截图软件flameshot

一、Ubuntu 安装和使用 Fcitx 中文输入法 在 Ubuntu 上安装和使用 Fcitx 输入法框架是一个常见的选择,特别是对于需要中文输入的用户。以下是详细的步骤来安装和配置 Fcitx 输入法: 1. 安装 Fcitx 和相关输入法 首先,更新你的包列表并安装…

单词搜索问题(涉及递归等)

目录 一题目: 二思路解释: 三解答代码: 一题目: newcode题目链接: 单词搜索_牛客题霸_牛客网 二思路解释: 思路:个人理解是找到word中的第一个元素,然后去递归的上下左右查找&am…

跳跃列表(Skip List)详解

什么是跳跃列表? 跳跃列表是一种概率性的数据结构,旨在提高链表的搜索、插入和删除效率。它通过在普通链表的基础上增加多个层次,以实现更快的访问速度。跳跃列表的设计灵感来源于跳跃图(Skip Graph)和多层索引的概念…

手把手搞定VMware 的CentOS硬盘扩容

1.背景 用VMware虚拟机创建Centos系统时,选了40GB硬盘,用着用着发现硬盘不够用了。于是,我为了给硬盘扩容,实操了下centos的硬盘扩容。本文是记录下整个操作过程,方便后面查询和使用。 2.操作 2.1 VMware操作 2.2 Ce…