当前位置: 首页 > news >正文

docker从零部署jenkins保姆级教程

jenkins,基本是最常用的持续集成工具。在实际的工作中,后端研发一般没有jenkins的操作权限,只有一些查看权限,但是我们的代码是经过这个工具构建出来部署到服务器的,所以我觉着有必要了解一下这个工具的搭建过程以及简单的一些使用。尽可能多的了解公司中和你开发相关的所有东西,不要只是干CRUD的工作,只有这样,你才会有成长。
我本地使用的mac充当宿主机,因为最近一直在看docker相关的东西,docker对于搭建测试环境非常方便,所以这次也选择用docker搭建jenkins。有一点,特别提一下,因为我们要访问github、dockerhub,所以需要能科学上网。
这篇文章的主要目标是搭建起我们本地的jenkins,然后用jenkins对我们的本地项目进行自动化的构建,打包,也就是我们常常手动执行的maven的clean、install命令。
好,下面正式开始搭建过程

文章目录

  • 1、下载jenkins镜像
  • 2、创建jenkins容器
  • 3、验证jenkins容器启动成功
  • 4、安装jenkins插件
  • 5、创建一个jenkins用户
  • 6、安装jenkins工具
  • 7、创建第一个jenkins任务
    • 7.1、创建一个任务
    • 7.2、配置git仓库的信息
    • 7.3、执行maven的打包命令
  • 8、测试jenkins打包
  • 9、jenkins构建时间和服务器同步

1、下载jenkins镜像

jenkins需要依赖jdk环境,所以我们直接下载带JDK的jenkins镜像,如下图

docker pull jenkins/jenkins:jdk11

最好不要尝试下载纯jenkins的容器,否则可能会报:
The JAVA_HOME environment variable is not defined correctly

2、创建jenkins容器

下面是创建jenkins容器的docker命令,解释一下创建参数

docker run 
-p 8080:8080 
-p 5030:5000 
--restart=always 
-v /etc/localtime:/etc/localtime 
-v /Users/abc/personal/test/docker/jenkins1/jenkins-data:/var/jenkins_home 
-v /Users/abc/.docker/run/docker.sock:/var/run/docker.sock 
-v /Users/abc/personal/test/docker/maven/apache-maven-3.8.1:/usr/local/maven 
--name jenkins_jdk11 
-d 
jenkins/jenkins:jdk11

1)、-p 8080:8080和 -p 5030:5000,都是将容器端口映射到宿主机的一个端口
2)、–restart=alwasy,是容器启动失败后重启
3)、-v是卷的意思,将宿主机目录映射到容器中的目录,卷在docker中很重要,感兴趣的同学可以再详细了解一下。
可以看到,我们的容器创建命令中有4个卷的指令。
第一个:将宿主机的时间文件映射到容器中,为的是让宿主机的时间和容器的时间保持一致
第二个:创建jenkins的工作目录,这个目录很重要。jenkins构建好的项目就会放到这个目录中。这里我们将jenkins的工作目录映
射到了宿主机的一个目录中
第三个:将本地的docker监听的文件映射到容器中。
第四个:将本地maven映射到容器的maven中。
4)、–name jenkins_jdk11,容器的名称是jenkins_jdk11
5)、-d 容器后台运行
6)、jenkins/jenkins:jdk11,使用这个镜像创建容器

3、验证jenkins容器启动成功

可以访问127.0.0.1:8080,如果可以看到jenkins的登录页面就算安装成功了
在这里插入图片描述
我们查看一下登录密码,输入,就可以登录到jenkins的主页面

4、安装jenkins插件

初始化jenkins的时候,会提示你安装建议的插件或者自行安装插件,我建议大家听jenkins的建议,毕竟当务之急是让jenkins先跑起来。
在这里插入图片描述
jenkins推荐的插件有一点多,需要等一会。

5、创建一个jenkins用户

随便搞一下,但是要记住,否则后面就登录不了jenkins了
在这里插入图片描述
下面这个配置信息,直接使用默认即可,不需要更改
在这里插入图片描述

6、安装jenkins工具

主要就是让jenkins使用上我们容器中的maven。
选择Manage Jenkins标签下的Tools标签
在这里插入图片描述
拉到最后
在这里插入图片描述
/usr/local/maven,是我们容器的maven目录,实际上是映射的宿主机中的maven(创建容器的时候,我们使用-v指定了本地的maven目录映射到容器的/user/local/maven目录中)

7、创建第一个jenkins任务

7.1、创建一个任务

在这里插入图片描述
填写一个任务名称,然后选择Freestyle project,接着点击ok
在这里插入图片描述

7.2、配置git仓库的信息

尤其注意最下面那个main,不是master了,我卡在这个地方好久,太大意了。这里稍微偏点题,github为什么要将用了很多年的master修改为main呢?据说是因为master、slave在老美那边代表的是奴隶制的词汇,很多人建议不要使用这种带有歧视性的词汇,所以github就将主分支的名称从master换成了main
在这里插入图片描述
这里要注意,你填写的git仓库代码,根路径下必须有一个pom文件,否则maven打包就会因为找不到pom而报错:
The goal you specified requires a project to execute but there is no POM in this directory

7.3、执行maven的打包命令

这个地方是为了验证我们的jenkins是不是安装成功了
在这里插入图片描述
在这里插入图片描述

8、测试jenkins打包

点击Build Now标签,开始构建项目,首次构建需要将项目依赖的jar包下载到容器中,可能需要一点时间,第二次构建就快多了。这里注意:我们的首次构建,不是要构建本地项目的docker镜像,只是测试一下jenkins的构建功能是否正常。
如下图,就是正在构建
在这里插入图片描述
如果看到构建任务的结束标志是一个✅,就是构建成功了。反之就是构建失败
在这里插入图片描述

如果构建失败,我们可以点击#1
在这里插入图片描述
然后点击Console Output来查看具体的报错信息
在这里插入图片描述

9、jenkins构建时间和服务器同步

不知道大家有没有注意到构建结果那里的时间和我们的宿主机以及docker容器的时间对不上,差了8个小时。
这是因为,本地宿主机是CST时区,东8区
而docker因为是老美的东西,所以默认是UTC时区,标准时间。这2个时区的时间差是8个小时,所以导致了我们jenkins的构建时间和宿主机差了8个小时。
修改的方式很简单,我们只需要在jenkins上执行一条命令即可
点击Manage Jenkins标签,然后选择最下面的Script Console
在这里插入图片描述
然后输入如下的命令,点击run

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai')

如果Result是这个结果,就证明执行成功了
在这里插入图片描述
此时,返回到job的构建结果处,再看我们的构建时间,就和宿主机保持一致了
在这里插入图片描述

下一篇,讲一下如何通过jenkins构建一个本地项目的docker镜像并运行

相关文章:

docker从零部署jenkins保姆级教程

jenkins,基本是最常用的持续集成工具。在实际的工作中,后端研发一般没有jenkins的操作权限,只有一些查看权限,但是我们的代码是经过这个工具构建出来部署到服务器的,所以我觉着有必要了解一下这个工具的搭建过程以及简…...

什么是 MVVM 模式?

MVVM 模式 官方解释:Vue 虽然没有完全遵循 MVVM 模型,但是 Vue 的设计也受到了它的启发。因此在文档中经常会使用 vm (ViewModel 的缩写) 这个变量名表示 Vue 实例。 什么是 MVVM 模式? MVVM 是一种新的开发模式,对比传统模式&…...

WebGL Varing变量的作用和内插过程,及执行Varing时涉及的图形装配、光栅化、颜色插值、片元着色器执行机制等详解

目录 前言 在 WebGL 或 OpenGL 中,“varying” 是一种用于在顶点着色器和片元着色器之间传递数据的特殊类型的变量。它允许在顶点着色器对数据进行处理后,在片元着色器中使用该处理后的数据进行进一步计算。 彩色三个点 ​编辑 彩色三个点示例代码…...

赢在起跑线:战略定位咨询带来的核心价值

在企业的发展之路上,三个核心问题始终伴随着我们:我们是谁?我们要做什么?我们要如何做?在业务的马拉松比赛中,开始时的位置至关重要。而战略定位咨询就是帮助企业赢在起跑线的关键。那么什么是战略定位?战略定位包含…...

【链表OJ 11】复制带随机指针的链表

前言: 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥 ✨✨刷题专栏:http://t.csdn.cn/UlvTc ⛳⛳本篇内容:力扣上链表OJ题目 目录 leetcode138. 复制带随机指针的链表 1. 问题描述 2.代码思路: 2.1拷贝节点插入到…...

Jenkins自动构建(Gitee)

Gitee简介安装JenkinsCLI https://blog.csdn.net/tongxin_tongmeng/article/details/132632743 安装Gitee jenkins-cli install-plugin gitee:1.2.7 # https://plugins.jenkins.io/gitee/releases获取安装命令(稍作变更) JenkinsURL Dashboard-->配置-->Jenkins Locatio…...

nginx离线安装

ngixn的离线安装(centos7) 需要的依赖 gcc、gcc-c pcre-8.42.tar.gz zlib-1.2.11.tar.gz openssl-1.1.1s.tar.gz perl-5.28.0.tar.gz 在进行nginx离线安装时,首先查看系统是否安装 gcc、gcc-c,若没有进行安装,请先进行安装 gcc -v #查…...

Oracle Merge Into ORA-00001: unique constaint violated问题

最近使用Datax同步进行定时数据同步,并在同步完之后进行回调sql进行统计操作。对应的ORACLE表结构如下: create table DATA_STAT_DAY ( DATA_DATE DATE, ID VARCHAR2(2), NAME VARCHAR2(2), CLASSNO VARCHAR2(2), SCORES NUMBER(16,0) );CREATE UNIQU…...

javaScript:DOM中的CSS操作

目录 1.style 属性获取元素写在行间的样式 2.getComputedStyle(元素对象,null)可以获取元素的非行间样式 3.案例(定义一个div和按钮,每点击一次按钮div宽度增加) 效果预览图 代码实现 在 JavaScript 中,可以通过…...

2023最新UI工作室官网个人主页源码/背景音乐/随机壁纸/一言

2023最新UI工作室官网个人主页源码/支持背景音乐/随机壁纸/一言 功能介绍: 载入动画 站点简介 Hitokoto 一言 日期及时间 实时天气 时光进度条 音乐播放器 移动端适配 打开文件;index.html和setting.json修改替换你的相关信息&a…...

常用命令之mysql命令之show命令

一、mysql show命令简介 mysql数据库中show命令是一个非常实用的命令,SHOW命令用于显示MySQL数据库中的信息。它可以用于显示数据库、表、列、索引和用户等各种对象的信息。我们常用的有show databases,show tables,show full processlist等&…...

iOS接入IJKPlayer遇到的问题汇总

这里有一个我自己编译的IJKMediaFramework,能解决目前Github上反馈很多常见的IJKPlayer使用问题(包含播放异常,UI主线程Crash等),替换自己项目中的IJKMediaFramework即可链接: https://pan.baidu.com/s/1UO-YfN_1YIDOX81bgW8bag?pwdvq4u 提取…...

【LeetCode题目详解】第八章 贪心算法 part06 738.单调递增的数字 968.监控二叉树 (day37补)

本文章代码以c为例&#xff01; 一、力扣第738题&#xff1a;单调递增的数字 题目&#xff1a; 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数…...

代码随想录算法训练营Day48 | 198.打家劫舍,213.打家劫舍II,337.打家劫舍III | Day 20 复习

198.打家劫舍 文章链接 | 题目链接 | 视频链接 C解法 class Solution { public:int rob(vector<int>& nums) {vector<int> dp (nums.size(), 0);if (nums.size() 0){return 0;}if (nums.size() 1){return nums[0];}dp[0] nums[0];dp[1] max(nums[0]…...

Spring Boot @Validated 和Javax的@Valid配合使用

一、Validated 和Valid有什么用 Validation 和Valid 常常配合使用对传输的参数进行数据校验的注解&#xff0c;并通过配置全局异常处理器进行合理化的提示&#xff0c;增加用户的体验 并且Validated可以通过分组来指定什么时候触发什么样的参数校验&#xff08;这里看一下就行…...

论文复现--lightweight-human-pose-estimation-3d-demo.pytorch(单视角多人3D实时动作捕捉DEMO)

分类&#xff1a;动作捕捉 github地址&#xff1a;https://github.com/Daniil-Osokin/lightweight-human-pose-estimation-3d-demo.pytorch 所需环境&#xff1a; Windows10&#xff0c;conda 4.13.0&#xff1b; 目录 conda环境配置安装Pytorch全家桶安装TensorRT&#xff08;…...

在Windows下设置将EXE开机自启动

在Windows下设置将EXE开机自启动&#xff0c;有多种方法。以下是两种常用的方法&#xff1a; 方法一&#xff1a;通过注册表 打开“运行”&#xff08;快捷键&#xff1a;Win R&#xff09;&#xff0c;输入&#xff1a;reg add HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windo…...

反序列化漏洞及漏洞复现

文章目录 渗透测试漏洞原理不安全的反序列化1. 序列化与反序列化1.1 引例1.2 序列化实例1.2.1 定义一个类1.2.2 创建对象1.2.3 反序列化1.2.4 对象注入 2. 漏洞何在2.1 漏洞触发 3. 反序列化漏洞攻防3.1 PHP反序列化实例3.1.1 漏洞利用脚本3.1.2 漏洞利用3.1.3 获取GetShell 3.…...

软件工程笔记001

2023年9月5日&#xff0c;周二上午 软件工程的目标 软件工程的目标是成功地开发一个软件&#xff1a; 较低的开发成本能按时交付软件开发出来的软件该有的功能都有开发出来的软件运行效率高开发出来的软件可靠性高开发出来的软件易于维护 软件的生存周期 概念 软件生存周期…...

java进行系统的限流实现--Guava RateLimiter、简单计数、滑窗计数、信号量、令牌桶

本文主要介绍了几种限流方法&#xff1a;Guava RateLimiter、简单计数、滑窗计数、信号量、令牌桶&#xff0c;漏桶算法和nginx限流等等 1、引入guava集成的工具 pom.xml 文件 <dependency><groupId>com.google.guava</groupId><artifactId>guava<…...

《86盒应用于家居中控》——实现智能家居的灵动掌控

近年来&#xff0c;智能家居产品受到越来越多消费者的关注&#xff0c;其便捷、舒适的生活方式让人们对未来生活充满期待。作为智能家居方案领域的方案商&#xff0c;启明智显生产设计的86盒凭借出色的性能和良好的用户体验&#xff0c;成功应用于家居中控系统&#xff0c;让家…...

【LeetCode】328. 奇偶链表

328. 奇偶链表&#xff08;中等&#xff09; 思路 如果链表为空&#xff0c;则直接返回链表。 对于原始链表&#xff0c;每个节点都是奇数节点或偶数节点。头节点是奇数节点&#xff0c;头节点的后一个节点是偶数节点&#xff0c;相邻节点的奇偶性不同。因此可以将奇数节点和偶…...

数字城市:科技革命下的未来之城

随着科技的不断进步&#xff0c;数字城市已经成为了未来城市发展的关键趋势。数字城市是指利用先进的信息技术、互联网和大数据等工具&#xff0c;将城市各个方面进行数字化、智能化、互联化的发展模式。它不仅仅是一种技术&#xff0c;更是一种对城市管理、发展和居民生活方式…...

Qt鼠标点击事件处理:按Escape键退出程序

创建项目 Qt 入门实战教程&#xff08;目录&#xff09; 首先&#xff0c;创建一个名称为QtKeyEscape的Qt默认的窗口程序。 参考 &#xff1a;Qt Creator 创建 Qt 默认窗口程序 Qt响应键盘Escape事件 打开Qt Creator >>编辑 >> 项目 >> Headers>> …...

P1162 填涂颜色

填涂颜色 - 洛谷 这个题用逆向思维&#xff0c;见不用染色的地方标记。 这里为了处理一些情况&#xff0c;将图周围一圈的0空出来&#xff0c;用于吧围墙之外的部分都标记上 用宽搜&#xff0c;四联通&#xff0c;感觉好奇怪&#xff0c;八连通ac不了 #include <iostrea…...

Vagrant命令

文章目录 1.介绍2.下载3. 配置3.1 配置环境变量3.2 在xshell中连接使用 4. 相关命令4.1 Box相关4.2 初始化环境4.4 虚拟机相关 1.介绍 Vagrant 是一个虚拟机管理工具 2.下载 https://www.vagrantup.com/ 3. 配置 3.1 配置环境变量 测试安装是否成功 3.2 在xshell中连接使…...

vue3+pinia实现动态类名及动态颜色

前提 store下models下有个before.ts文件 import { defineStore } from "pinia"; export const usebeforeloggininStore defineStore("counterStore", {state: () > ({beforelogin_params: [{type: "A登录",color: "#000",flag: 1,…...

CSS实现隐藏滚动条但可以滚动

场景 隐藏滚动条&#xff0c;但可以滚动 解决 全局样式 /* 隐藏滚动条 */ .outer-container::-webkit-scrollbar {width: 0; /* 设置滚动条的宽度为0 */background-color: transparent; /* 设置滚动条背景为透明 */ }/* 自定义滚动条轨道样式 */ .outer-container::-webkit…...

Ceph入门到精通-lunix将文本5行合成1行并按列统计

要将每5行合并为1行&#xff0c;您可以使用shell命令来完成。假设您有一个名为text.txt的文本文件&#xff0c;您可以使用以下命令来实现&#xff1a; bash cat text.txt | paste -d - - - - - 这将把文件中的每5行合并为1行&#xff0c;并且每个字段之间用空格分隔开来。您…...

linux线程讲解

1.线程概述 一个进程在同一时刻只做一件事情&#xff0c;进程是程序执行的一个实例。 线程是操作系统能够进行运算调度的最小单位&#xff0c;一个进程中可以并发多个线程&#xff0c;每条线程并行执行不同的任务。 进程&#xff1a;资源分配的最小单位。线程&#xff0c;程…...