从零开始带你实现一套自己的CI/CD(一)Jenkins

news2025/1/11 16:57:20

目录

  • 一、简介
  • 二、环境准备
    • 2.1 安装Docker和Docker-compose
    • 2.2 远程仓库Github/Gitee/GitLab
    • 2.3 部署Jenkins
  • 三、配置Jenkins
    • 3.1 Jenkins配置源码拉取地址
    • 3.2 Jenkins配置Maven构建代码
      • 3.2.1 准备jdk
      • 3.2.2 配置Maven
      • 3.2.3 Jenkins配置JDK&Maven并保存
    • 3.3 配置Jenkins任务构建代码
    • 3.4 配置Publish发布&远程操作
    • 3.5 配置任务的构建后操作
    • 3.6 立即构建任务
  • 四、CI/CD入门操作
    • 4.1 添加Dockerfile文件
    • 4.2 添加docker-compose.yml文件
    • 4.3 追加Jenkins构建后操作脚本命令
    • 4.4发布到Git仓库后由Jenkins立即构建并托送到目标服务器
    • 4.5 测试部署到目标服务器程序

一、简介

DevOps,字面意思是Development &Operations的缩写,也就是开发&运维。DevOps的方式可以让公司能够更快地应对更新和市场发展变化,开发可以快速交付,部署也更加稳定。

整体的软件开发流程包括:
PLAN–》CODE --》BUILD --》 TEST --》DEPLOY --》OPERATE --》MONITOR --》INTEGRATE

在这里插入图片描述

技术栈准备
Linux
JDK
Git
Github/Gitee/GitLab
Maven
Jenkins
Docker
Docker-compose

二、环境准备

2.1 安装Docker和Docker-compose

安装dockerdocker-compose环境:略

docker-compose 下载地址:https://github.com/docker/compose

2.2 远程仓库Github/Gitee/GitLab

可以使用Github或者Gitee作为远程Git代码仓库,可以自己部署GitLab

新建远程Git仓库:
在这里插入图片描述

2.3 部署Jenkins

(需要部署好docker和docker-compose环境)

准备docker-compose.yml 文件:

端口8080,并且将容器内/var/jenkins_home/目录挂载到宿主机当前目录的data目录。

version: "3.1"
services:
  jenkins:
     image: jenkins/jenkins
     container_name: jenkins
     ports:
        - 8080:8080
        - 50000:50000
     volumes:
        - ./data/:/var/jenkins_home/

使用docker-compose up -d 命令执行docker-compose.yml 文件。
在这里插入图片描述

使用docker-compose logs -f命令查看docker-compose日志:

在这里插入图片描述

或者使用/var/jenkins_home/secrets/initialAdminPassword命令查看密码:
在这里插入图片描述
note:不是在宿主机目录,而是容器内目录。

启动成功后,在浏览器访问:服务器IP+8080:
在这里插入图片描述

选择 选择插件来安装
在这里插入图片描述

搜索 Git 勾选Git Parameter:
在这里插入图片描述

搜索 publish 勾选Publish Over SSH:
在这里插入图片描述
点击安装
在这里插入图片描述

创建一个用户:
在这里插入图片描述
配置Jenkins URL,完成部署:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、配置Jenkins

由于Jenkins需要从Git仓库拉取代码、需要本地构建、甚至需要直接发布自定义镜像到Docker仓库,所以Jenkins需要配置大量内容。

3.1 Jenkins配置源码拉取地址

创建Jenkins任务:
在这里插入图片描述

选择源码管理 --》选择Git ,输入Git远程仓库的地址,点击保存

在这里插入图片描述

点击立即构建

在这里插入图片描述
可以看到源码已经拉取带Jenkins本地,可以根据第三行日志信息,查看Jenkins本地拉取到的源码。

在这里插入图片描述

查看Jenkins容器中/var/jenkins_home/workspace/test的源码:
在这里插入图片描述

3.2 Jenkins配置Maven构建代码

代码拉取到Jenkins本地后,需要在Jenkins中对代码进行构建,这里需要Maven的环境,而Maven需要Java的环境,接下来需要在Jenkins中安装JDK和 Maven,并且配置到Jenkins服务

note: 在宿主机目录,在使用docker-compose部署Jenkins的时候已经将jenkins容器内的/var/jenkins_home/目录映射到了宿主机./data/目录:

在这里插入图片描述
所以只需要把jdk和maven的压缩包上传到此目录即可。

3.2.1 准备jdk

使用tar -zxvf jdk-8u351-linux-aarch64.tar.gz解压压缩包即可。(无需配置环境变量)
在这里插入图片描述
Note:
oracle jdk 官网地址:https://www.oracle.com/java/technologies/downloads/#java8-linux
Oracle下载jdk是需要登录的,这个Oracle账号亲测可用:

账号:bnptrhinldfoguijh@mytrashmailer.com
密码:#&qRfvE7rg37GhjEfDJy

3.2.2 配置Maven

使用tar -zxvf apache-maven-3.8.6-bin.tar.gz 命令解压Maven压缩包,并配置Maven的settings.xml

<!-- 阿里云镜像地址 --> 
<mirror>
	<id>alimaven</id> 
	<name>aliyun maven</name> 
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
	<mirrorOf>central</mirrorOf> 
</mirror> 
<!-- JDK1.8编译插件 --> 
<profile> 
	<id>jdk-1.8</id> 
	<activation> 
		<activeByDefault>true</activeByDefault> 
		<jdk>1.8</jdk>
	</activation> 
	<properties> 
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target> 
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> 
	</properties> 
</profile>

3.2.3 Jenkins配置JDK&Maven并保存

上面两步已经准备了jdk和maven环境,现在需要配置到Jenkins中。

在这里插入图片描述

JAVA_HOME/var/jenkins_home/jdk1.8.0_351
MAVEN_HOME/var/jenkins_home/apache-maven-3.8.6
在这里插入图片描述
在这里插入图片描述

3.3 配置Jenkins任务构建代码

test项目中,配置构建环境:

在这里插入图片描述
选择调用底层Maven目标,目标为package,点击保存

在这里插入图片描述
点击立即构建

在这里插入图片描述
查看控制台日志
在这里插入图片描述

3.4 配置Publish发布&远程操作

jar包构建好之后,就可以根据情况发布到测试或生产环境,这里需要用到之前下载好的插件Publish Over SSH
配置远程服务器信息:
在这里插入图片描述

3.5 配置任务的构建后操作

配置test任务的构建后操作,发布jar包到目标服务:
选择Send build artifacts over SSH
在这里插入图片描述

Source files 填写 target/*.jar

在这里插入图片描述

3.6 立即构建任务

点击立即构建,查看控制台日志,并去目标服务器查看:
在这里插入图片描述

在这里插入图片描述
在服务器指定目录查看构建的jar包:

在这里插入图片描述

到此为止,我们实现了本地代码上传到远程仓库,通过Jenkins拉去代码,使用Maven构建打包,并将jar包发送到服务器指定目录。

四、CI/CD入门操作

  1. 基于Jenkins拉取远程Git仓库的代码进行构建发布到测试环境实现持续集成。

  2. 基于Jenkins拉取Git仓库指定发行版本的代码进行构建发布到生产环境实现CD实现持续部署。

为了让程序代码可以自动推送到测试环境基于Docker服务运行,需要添加Docker配置和脚本文件让程序可以在集成到主干的同时运行起来。

4.1 添加Dockerfile文件

FROM adoptopenjdk/openjdk8
COPY app.jar /usr/local
WORKDIR /usr/local
CMD java -jar app.jar

4.2 添加docker-compose.yml文件

version: '3.1'
services: 
  app:
    build: ./
    image: app:v1.0.0
    container_name: app
    ports:
      - 8888:8080

在这里插入图片描述

4.3 追加Jenkins构建后操作脚本命令

在Jenkins test项目的构建后操作的Source files 增加target/*.jar,docker/*

Exec command 添加脚本命令:

cd /data/jenkins_project/docker
mv ../target/*.jar ./app.jar
docker-compose down
docker-compose up -d --build
docker image prune -f

在这里插入图片描述

4.4发布到Git仓库后由Jenkins立即构建并托送到目标服务器

点击 立即构建
在这里插入图片描述

4.5 测试部署到目标服务器程序

进入目标服务器,使用docker ps命令,查看容器是否启动:
在这里插入图片描述
浏览器访问:
在这里插入图片描述
到此步骤,我们完成了:
本地IDE --》远程Git仓库 --》Jenkins拉取代码 --》Jenkins使用Maven构建打包 --》发布到服务器 --》执行脚本命令启动Docker容器。

下一篇文章我们继续学习DevOpsCI/CD流程。

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

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

相关文章

【日常折腾】重新安装Windows7,做好ghost备份,迁移主目录,日常软件office,chrome,搜狗输入法,电脑管家,一键ghost进行备份。

目录前言1&#xff0c;关于Windows2&#xff0c;电脑起码分两个盘c、d盘3&#xff0c;因为主目录切换了&#xff0c;相关的其他人软件的数据都会迁移过去4&#xff0c;安装office软件3件套&#xff0c;不要全家桶5&#xff0c;安装电脑管家&#xff0c;还是选择腾讯吧6&#xf…

17条卢松松近期言论汇总

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 本文汇集了前段时间卢松松写的段子&#xff0c;有心情感悟、工作感悟、做直播带货、创业的感悟。关注互联网、草根创业者的朋友可以看看&#xff01; (1) 人最舒服的是什么时候呢?我认为&#xff…

RabbitMQ的工作模式

一.RabbitMQ的一些知识 1.消息属性 RabbitMQ是基于AMQP消息传输协议来实现的消息中间件&#xff1b;类似HTTP有header和body两部分数据&#xff0c;Message是RabbitMQ中的消息体概念。 Message由Properties和Body组成&#xff0c;前者是一些元信息&#xff0c;如消息的优先级…

【LeetCode】1769.移动所有球到每个盒子所需的最小操作数

题目描述 有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes &#xff0c;其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的&#xff0c;而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。 在一步操作中&#xff0c;你可以将 一个 小球从某个盒子移动到一个与之相邻的…

整理Ubuntu深度学习服务器初始化操作

前言 这两年总是换服务器&#xff0c;每次配置都挺麻烦的要搜一堆东西&#xff0c;干脆直接整理一下供自己以后参考。 版本说明 Ubuntu 20.04 桌面版 系统配置 配置SSH 安装ssh sudo apt update sudo apt install openssh-server检查ssh状态 sudo systemctl status ssh…

js将图片或者文件转成base64格式的两种方法

场景一&#xff0c;项目assets资源里面的图片本地图片&#xff0c;重点如下 需要了解 canvas的基本操作&#xff0c;canvas.toDataURL 方法 HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI 。可以使用 type 参数其类型&#xff0c;默认为 PNG 格式。图片…

session和cookie的区别

文章目录一概念理解1、无状态的HTTP协议&#xff1a;2、会话&#xff08;Session&#xff09;跟踪&#xff1a;二cookie1、会话Cookie和持久Cookie2、Cookie具有不可跨域名性三. Session1、两个问题&#xff1a;2、session的创建&#xff1a;3、禁用cookie&#xff1a;四. 总结…

GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry——渲染点

GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry——渲染点 效果 1、html官方版 <!DOCTYPE html> <html> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1"> <t…

c实现mp4解封装

文章目录前序MP4简介MP4的定义MP4的封装格式Box类型详解Box格式ftyp boxmvhd boxtkhd boxhdlr boxmdat boxstbl boxstsd boxstco boxstsc boxstsz boxstts boxstss boxdemuxer demo的实现(视频数据部分)总结&#xff1a;工具介绍源码参考前序 最近为了更加深入了解音视频demux…

nginx源码分析--基数树

typedef struct {ngx_radix_node_t *root;ngx_pool_t *pool;ngx_radix_node_t *free;char *start;size_t size; } ngx_radix_tree_t;预备知识 1.基数树也是一种二叉查找树,目前官方模块中仅geo模块使用了基数树.2.ngx_radix_tree_t基数树要求…

微服务框架 SpringCloud微服务架构 8 Gateway 网关 8.7 网关的cors 跨域配置

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构8 Gateway 网关8.7 网关的cors 跨域配置8.7.1 跨域问题处理8.7.2 案例8.7.…

深入讲解Netty那些事儿之从内核角度看IO模型(下)

接上文深入讲解Netty那些事儿之从内核角度看IO模型&#xff08;上&#xff09; epoll 通过上边对select,poll核心原理的介绍&#xff0c;我们看到select,poll的性能瓶颈主要体现在下面三个地方&#xff1a; 因为内核不会保存我们要监听的socket集合&#xff0c;所以在每次调用…

最全面的Spring教程(六)——WebSocket

前言 本文为 【SpringMVC教程】WebSocket 相关知识介绍&#xff0c;具体将对WebSocket进行简介&#xff0c;并通过实战案例对WebSocket的使用进行详尽介绍~ &#x1f4cc;博主主页&#xff1a;小新要变强 的主页 &#x1f449;Java全栈学习路线可参考&#xff1a;【Java全栈学…

SpringBoot接口 - 如何优雅的写Controller并统一异常处理?

内容目录 为什么要优雅的处理异常 实现案例ControllerAdvice异常统一处理Controller接口运行测试 进一步理解ControllerAdvice还可以怎么用&#xff1f;ControllerAdvice是如何起作用的&#xff08;原理&#xff09;&#xff1f; 示例源码 更多内容 SpringBoot接口如何对异…

【Pygame实战】代码版《舞动青春*炫舞》能否引领音舞游戏再一次爆发?“你还记得最浪漫的舞蹈游戏炫舞吗?”

导语 Hello&#xff0c;大家好呀&#xff01;我是木木子吖&#xff5e; 一个集美貌幽默风趣善良可爱并努力码代码的程序媛一枚。 听说关注我的人会一夜暴富发大财哦~ &#xff08;哇哇哇 这真的爱&#x1f60d;&#x1f60d;&#xff09; 所有文章完整的素材源码都在&#…

GIS工具maptalks开发手册(二)01-11——渲染文字及参数注释

GIS工具maptalks开发手册(二)01-11——渲染文字及参数注释 效果 代码 index.html <!DOCTYPE html> <html> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1"> <title>…

E. Gardener and Tree(拓扑排序)

Problem - 1593E - Codeforces 树是一个无定向的连接图&#xff0c;其中没有循环。这个问题是关于无根的树。一棵树的叶子是一个顶点&#xff0c;它最多与一个顶点相连。 园丁维塔利用n个顶点种了一棵树。他决定对这棵树进行修剪。为了做到这一点&#xff0c;他进行了一些操作…

云原生应用的最小特权原则

IDC 预计&#xff0c;从现在到 2024 年初&#xff0c;将开发和部署 5 亿个新应用程序——超过过去 40 年的总和。 Gartner 预测&#xff0c;到 2025 年&#xff0c;75% 的企业将运行某种容器化应用程序。 现代应用程序需要现代安全性。 公共云供应商非常积极地提升平台安全性&…

JAVA培训之连接查询之子查询

子查询就是嵌套查询&#xff0c;即SELECT语句中包含SELECT语句&#xff0c;如果一条语句中存在两个&#xff0c;或两个以上SELECT&#xff0c;那么就是子查询语句了。 子查询出现的位置&#xff1a; Where子句中&#xff0c;作为条件存在&#xff1b;from后&#xff0c;作为表…

Bootstrap学习(十一)

模态框使用&#xff1a; tab标签页组件 模态框使用&#xff1a; 有属性、方法、事件 fade显示时的渐变动画可加可不加&#xff0c;role是屏幕辅助设备用的 aria-lable屏幕辅助设备用的 静态的模态框是不展示的&#xff0c;需要调用展示方法才能展示 在中心内容放一个表单&…