通过部署Java工程学习Jenkins

news2024/11/15 23:30:26

今天来学习Jenkins部署应用,在工作中一般都是提交代码到git之后,通过自动打包的功能形成jar包,然后运行jar包。服务器自动从git拉取最新代码进行打jar包的这个过程就通过Jenkins来进行。

Jenkins官网地址

首先我们可以看一下官网的版本

 

我们需要关注这个版本号,他是Jenkins长期支持的最新版本

回到我们的Linux服务器,我是基于docker安装的,没有安装docker的同学可以先安装一下

Docker学习笔记(一)——基本使用

有了docker后,通过如下命令安装Jenkins,注意后面为版本号!

docker pull jenkins/jenkins:2.401.1-lts

之后创建存放关于Jenkins文件的目录

然后创建docker-compose文件

注意,执行docker-compose 命令需要单独下载,下载方式:

# 下载docker-compose 比较慢,需要耐心等待,如果有问题可以私聊我获取
sudo curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 授予权限
sudo chmod +x /usr/local/bin/docker-compose

# 最后验证是否下载成功
docker-compose -v

下载成功后我们就可以继续进行Jenkins的安装了。

# 编写docker-compose文件
vi docker-compose.yml

# 文件内容为
version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins:2.401.1-lts
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - /usr/local/docker/docker_jenkins/data/:/var/jenkins_home/

#复制之后Esc   :wq保存退出

# 需要将本地/usr/local/docker/docker_jenkins/data文件夹开启读写权限
chmod -R 777 data

#退出之后通过如下命令将docker-compose运行起来
docker-compose up -d

# 重启
docker-compose restart

# 查看日志
docker logs -f ${文件内容中的container_name}

成功启动后查看日志显示为:

 红色处为初始密码,用于在网站上登录Jenkins

打开浏览器,访问IP:8080地址,即可访问Jenkins

 输入日志中的初始密码。

# 由于Jenkins需要下载大量插件,如果网速较慢,需要更换下载源
# 修改数据卷data文件夹中hudson.model.UpdateCenter.xml

# 原内容---------------------------
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://updates.jenkins.io/update-center.json</url>
  </site>
</sites>


# 更换为------------------------------
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>http://mirror.esuni.jp/jenkins/updates/update-center.json</url>
  </site>
</sites>

输入密码后展示此页面

 点击之后会显示需要安装什么插件,直接下一步就可以了,安装他默认的插件,之后我们有需要的插件再单独安装。就算默认的插件下载不下来,我们之后也可以去Jenkins官网进行下载

下载完默认插件之后就会跳转到注册管理员的页面,方便记忆就好。

 管理员注册成功后会展示如下页面,我们直接保存即可。

 登录之后我们需要去下载我们需要的插件

 

 

 我们需要下载如下插件:

1.git parameter

2.Publish Over SSH

选择后点击红框下载

 下载好插件之后我们需要将jdk与maven复制到Jenkins的数据卷中(也就是需要放到我们docker-compose文件中的volumes键值对中冒号前的文件夹中)

 移动到/usr/local/docker/docker_jenkins/data文件夹,中根据jdk与maven的名称,执行如下命令。

mv /usr/local/jdk1.8.0_371/ ./
mv /usr/local/apache-maven-3.9.2/ ./

移动成功后我们进入容器内查看jdk与maven是否存在

# 进入容器
docker exec -it jenkins bash

# 进入根目录
cd ~

确定存在之后我们在Jenkins页面进行全局配置

 

 Maven也是同理

 设置完毕后保存

接下来我们要配置转发访问的目标服务器。

 进入后拉到最下方,可以使用密钥方式访问,也可以通过用户名密码访问,这里使用用户名密码访问。

 

 

 

其中我们要注意 /usr/local/test 文件目录,需要在Linux中有此文件夹!!

最后测试连接

首先我们要创建一个git仓库,与本地代码进行绑定,有需要的小伙伴可以看一下我这篇文章。

Git创建个人远程仓库实操

现在我们需要将Jenkins与Git进行绑定,我们在Jenkins中创建一个任务

 

设置完点击应用保存,保存之后我们就可以进行构建了

查看Jenkins中的代码

# 进入容器
docker exec -it jenkins bash

# 进入用户目录
cd ~

# 进入工作空间
cd workspace/

# 展示目录中文件
ls

# 这里面的文件就是我们的项目代码文件

 接下来我们需要将代码构建成jar包

 

 

 

设置之后我们进行应用保存,然后回到上层页面进行立即构建,此时就会执行拉取代码+打包的动作

我们可以在Jenkins容器中查看jar包

# 进入容器
docker exec -it jenkins bash

# 进入用户目录
cd ~

# 进入工作空间
cd workspace/

# 展示目录中文件
ls

# 进入项目代码
cd 项目名

# 进入包
cd target

 

我们就看到target包了

 打包成功后我们就要推送到docker中,进行启动

我们首先进入配置,对构建后操作进行配置

 

配置成功后,进行应用保存

 之后再次进行构建,就会将jar包推送到我们的服务器中具体会推送到哪里会根据我们设置的service信息来也就是如下图中的Remote Directory

 构建成功后我们就能在对应目录下看到打包后的文件了

 接下来我们要进行将jar包作为一个镜像启动

首先我们要在项目中创建一个dockerfile,不了解的同学可以看一下下面的文章

Docker学习笔记(三)——Dockerfile及数据、网络连通

# docker-compose文件内容,8080端口已经占用,所以改为8081
version: "3.1"
services:
  mytest:
    build:
      context: ./
      dockerfile: Dockerfile
    image: mytest:v1.0.0
    container_name: mytest
    ports:
      - 8081:8080
# Dockerfile文件内容
FROM daocloud.io/library/java:8u40-jdk
COPY mytest.jar /usr/local/
WORKDIR /usr/local
CMD java -jar mytest.jar

pom文件指定包名

 最后将修改提交到git上。

然后我们继续对Jenkins进行构建后处理

额外添加两个构建的内容

 最后我们要输入启动镜像的命令

# 跳转到当前目录
cd /usr/local/test

# 移动target目录下的jar文件到当前目录
mv ./target/*.jar ./

# 停止之前的容器
docker-compose down

# 启动容器
docker-compose up -d --build

# 由于我们迭代启动会有很多历史镜像,名称都会变为none,所以需要此命令进行删除
docker image prune -f

应用并保存

之后我们再次回到上层点击立即构建,就会自动进行从git拉取代码,构建打包,构建镜像,启动容器,我们直接访问即可

此时有一个问题,拉取的代码默认都是master分支,我们需要根据不同环境用不同的分支进行打包,例如测试环境就需要用测试分支,此时我们就需要在构建前进行切换分支的操作

首先我们需要对参数化操作进行勾选

 

 

 

此时,我们整个jenkins服务就基本搭建好了,最近学习时间比较紧张,所以文章记录的比较潦草,所以哪里说的不清楚,有小伙伴有疑问的可以私聊哦

 

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

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

相关文章

智能学习 | MATLAB实现GWO-SVM多输入单输出回归预测(灰狼算法优化支持向量机)

智能学习 | MATLAB实现GWO-SVM多输入单输出回归预测(灰狼算法优化支持向量机) 目录 智能学习 | MATLAB实现GWO-SVM多输入单输出回归预测(灰狼算法优化支持向量机)预测效果基本介绍模型原理程序设计参考资料预测效果 基本介绍 Matlab实现GWO-SVM灰狼算法优化支持向量机的多输…

Vue中如何进行状态持久化(LocalStorage、SessionStorage)

Vue中如何进行状态持久化&#xff08;LocalStorage、SessionStorage&#xff09;&#xff1f; 在Vue应用中&#xff0c;通常需要将一些状态进行持久化&#xff0c;以便在用户关闭浏览器或刷新页面后&#xff0c;仍能保留之前的状态。常见的持久化方式包括LocalStorage和Sessio…

Cracking C++(8): 开发环境的选择

Cracking C(8): 开发环境的选择 文章目录 Cracking C(8): 开发环境的选择1. 目的2. 工具代码编辑器 和 IDEWindows命令行界面编译器gcc/gclang/clangMicrosoft Visual Studio基于浏览器的编译器 3. 其他工具补充调试器代码分析工具其他 1. 目的 在看了 hackingcpp 的 C Develo…

《百年孤独》15句经典语录

句句都是人生真相&#xff0c;说透了所有人的孤独。 1、生命中曾经有过的所有灿烂&#xff0c;原来终究&#xff0c;都需要用寂寞来偿还。 2、过去都是假的&#xff0c;回忆是一条没有尽头的路。 这句话是最受读者欢迎的一句话&#xff0c;回忆就是一条没有尽头的路&#xf…

shell脚本基础5——常用命令写作技巧

文章目录 一、grep命令二、sed命令2.1 选项参数2.2 常用命令 三、AWK命令3.1 常用参数3.2 常用示例 四、find与xargs五、date命令六、对话框6.1 消息框6.2 yes/no对话框6.3 表单输入框6.4 密码输入框6.5 菜单栏6.6 单选对话框6.7 多选对话框6.8 进度条 七、常用写作技巧7.1 EOF…

我,ChatGPT,打钱

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 一、ChatGPT是个啥&#xff1f; chat&#xff1a;表示“聊天”。 GPT&#xff1a;则是G…

提升Python函数调用灵活性:参数传递类型详解

前言 在Python编程中&#xff0c;函数参数起着非常重要的作用。函数参数允许我们向函数传递数据&#xff0c;并在函数内部使用这些值。Python提供了多种参数传递类型&#xff0c;包括位置参数、关键字参数、默认参数、可变数量的位置参数、可变数量的关键字参数。这些不同的参数…

数据结构——串(字符串)

文章目录 **一 串的定义和实现****1 定义****2 串的存储结构****2.1 定长顺序存储表示****2.2 堆分配存储表示****2.3 块链存储表示** **3 串的基本操作** **二 串的模式匹配****1 简单的模式匹配算法****2 串的模式匹配算法——KMP算法****2.1 字符串的前缀&#xff0c;后缀和…

一起学SF框架系列5.4-模块Beans-DefaultListableBeanFactory

在生成ApplicationContext过程中&#xff0c;AbstractRefreshableApplicationContext.refreshBeanFactory()完成旧BeanFactory关闭&#xff0c;创建新的BeanFactory&#xff0c;即new DefaultListableBeanFactory(…)。然后bean实例化时调用本类的preInstantiateSingletons方法…

网安笔记12 IPsec

IPSec 基于通信IP环境下一种端到端&#xff0c;保证数据安全的机制 包含 两个安全协议&#xff0c;一个密钥管理协议&#xff0c; 标准价秘密技术为基础 DES/其他分组加密算法键值hash算法认证公钥有效的数字证书 AH协议提供信息源验证、完整性保证ESP提供信息源验证、机密…

华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】

一、题目描述 计算一个浮点数的立方根&#xff0c;不使用库函数。保留一位小数。 数据范围&#xff1a;∣val∣≤20 。 二、输入描述 待求解参数&#xff0c;为double类型&#xff08;一个实数&#xff09; 三、输出描述 输出参数的立方根。保留一位小数。 四、解题思路…

Git工作流(随笔)

目录 前言 一、工作流概述 1、概念 2、分类 二、集中式工作流 1、概述 2、介绍 3、操作过程 三、功能分支工作流 1、概述 2、介绍 3、操作过程 1&#xff09;创建远程分支 2&#xff09;删除远程分支 四、GitFlow工作流 1、概述 2、介绍 3、操作过程 五、Forki…

Linux系统:CentOS编译Linux内核

目录 一、实验 1.下载内核 2.解压内核源码 3.配置依赖的环境 4.进入源码目录&#xff0c;使用make menuconfig开启菜单选项&#xff0c;手动选择内核功能 5.编译内核 6.安装模块 7.安装内核 8.验证新内核版本 一、实验 1.下载内核 &#xff08;1&#xff09;官网下载…

010:vue中el-table 隐藏表头的两种方法

第010个 查看专栏目录: VUE — element UI echarts&#xff0c;openlayers&#xff0c;cesium&#xff0c;leaflet&#xff0c;mapbox&#xff0c;d3&#xff0c;canvas 免费交流社区 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例…

【Kubernetes存储篇】StorageClass存储类动态生成PV详解

文章目录 一、StorageClass存储类理论二、案例&#xff1a;Storageclass存储类实战演示1、搭建NFS服务端2、搭建NFS供应商(provisioner)3、创建StorageClass存储类4、创建PVC&#xff0c;通过StorageClass动态生成PV5、创建Pod挂载PVC 三、步骤总结 一、StorageClass存储类理论…

web测试工程师的工作职责

web测试工程师的工作职责1 职责: 1、 负责数据平台产品的测试工作&#xff0c;参与产品需求分析&#xff0c;负责方案制定,并能预先评估项目风险&#xff0c;确保测试活动的顺利开展; 2、 深入理解系统内部的设计原理&#xff0c;并能从测试的角度提供优化意见; 3、 根据产品需…

LVS+Keepalived 高可用群集实战部署

目录 前言 一、Keepalived工具介绍 1、Keepalived的作用 2、 Keepalived体系主要模块 二、keepalived工作原理 1、VRRP &#xff08;虚拟路由冗余协议&#xff09; 2、VRRP &#xff08;虚拟路由冗余协议&#xff09; &#xff08;1&#xff09;keepalived.conf是主配置文…

qt 使用qtpdfium实现读取pdf文件

此处仅作为笔记和配置指导。 要想获取源码可Git hub上下载&#xff0c;这里推荐一个&#xff1a;QtPdfium_Build_Source: 基于Google pdfium 库&#xff0c;可编译和编译好的Qtpdfium 库&#xff0c;用于加载pdf文件进行预览 (gitee.com) 目前小编根据推荐的编译方法&#xf…

STM32F0实现数字化SPWM纯正弦波逆变器

一、理论基础 所谓SPWM&#xff0c;就是通过只有开关两个状态&#xff08;离散&#xff0c;数字的&#xff09;的PWM序列产生正弦波&#xff08;连续&#xff0c;模拟的&#xff09;的方法。其理论基础一句话就能说明白&#xff1a;冲量相等而形状不同的窄脉冲加在具有惯性的环…

golang语法的注意事项

目录 1.源文件以.go结尾2.过文件只能存在一个mian 函数 (入口函数)3. go严格区分大小写4. golang的每行代码是一个语句 默认存在 ; 不需要自己写了5. golang 是每一行每一行的执行的 不要把多个语句写在一行6. 定义变量 或是导入的包未使用 无法同过编译7. {} 都是成对出现 为了…