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镜像并运行

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

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

相关文章

网络通信深入解析:探索TCP/IP模型

http协议访问web 你知道在我们的网页浏览器的地址当中输入url,未必是如何呈现的吗? web浏览器根据地址栏中指定的url,从web服务器获取文件资源(resource)等信息,从而显示出web页面。web使用HTTP&#xff08…

vs code调试rust乱码问题解决方案

在terminal中 用chcp 65001 修改一下字符集,就行了。有的博主推荐 修改 区域中的设置,这会引来很大的问题。千万不要修改如下设置:

八个针对高级职位的高级 JavaScript 面试题

JavaScript 是一种功能强大的语言,是网络的主要构建块之一。这种强大的语言也有一些怪癖。例如,您是否知道 0 -0 的计算结果为 true,或者 Number("") 的结果为 0? 问题是,有时这些怪癖会让你摸不着头脑&…

同步推送?苹果计划本月推出 iOS17和iPadOS17,你的手机支持吗?

据报道,苹果公司计划在本月推出 iOS 17 和 iPadOS 17 正式版更新。与去年不同的是,这次更新将同时发布,而不是分别发布。根据彭博社的一位消息人士马克・古尔曼的说法,苹果公司认为 iOS 17 和 iPadOS 17 的第八个测试版已经非常接…

动态库的制作与使用及 动态库加载失败解决

加载动态库时有时会出现error while loading shared libraries:libcalc.so:可以通过lld命令查看动态库的依赖关系,发现libcalc.so时not found 原因 查找的优先级是DT_RPATH->LD_LIBRARY_PATH->/etc/ld.so.cache->/lib/,/usr/lib 找不到一个优…

文心一言api接入如何在你的项目里使用文心一言

文心一言api接入在项目里接入文心一言 一、百度文心一言API二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、百度文心一言API 基于百度文心一言语言大模型的智能文本对话AI机器人…

java读取服务器数据包并下载至本地目录

jsch包如果没有的话,可评论联系我,我私发给你,或者通过https://mvnrepository.com/artifact/com.jcraft/jsch/0.1.55进行下载,添加至工程目录 package com.hbisdt.dqbasic.modular.util;import com.jcraft.jsch.*;import java.i…

【word技巧】如何在word文件中方框打对勾?

Word文件制作了调查问卷或者信息表之类的文件,总是少不了有需要打勾的选项,如果打印成了纸质文件打勾就简单了,但是在word文件中应该如何在方框中打√符号呢?今天分享三个方法。 方法一: 先输入一个大写的R&#xff…

个人信息去标识化具体实施指南

声明 本文是学习个人信息去标识化指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 范围 本标准描述了个人信息去标识化的目标和原则,提出了去标识化过程和管理措施。 本标准针对微数据提供具体的个人信息去标识化指导,适…

哈希的应用——布隆过滤器

文章目录 前言1. 布隆过滤器提出2. 布隆过滤器概念3. 布隆过滤器的插入多哈希函数映射减少冲突结构定义及set(插入)函数实现 4. 布隆过滤器的查找test(查找)函数实现布隆过滤器允许误判 5. 布隆过滤器的适用场景6. 如何选择布隆过…

JVM 对象的内存布局

对象头 Mark word 标记字段 用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等 ClassPoint 类型指针 对象指向它的类型元数据的指针,Java虚拟机通过这个指针 来…

延时消息队列

目录 前言 一、延时队列实用场景 二、DelayQueue DelayQueue的实现 使用延迟队列 DelayQueue实现延时任务的优缺点 三、RocketMQ 原理 四、Kafka 原理 实现 DelayMessage定义 消息发送代码 消费者代码 参考 前言 延时队列的内部是有序的,最重要的…

Linux之NFS服务器

目录 Linux之NFS服务器 简介 NFS背景介绍 生产应用场景 NFS工作原理 NFS工作流程图 流程 NFS的安装 安装nfs服务 安装rpc服务 启动rpcbind服务同时设置开机自启动 启动nfs服务同时设置开机自启动 NFS的配置文件 主配置文件分析 示例 案例 --- 建立NFS服务器&#…

【Python】环境的搭建

前言 要想能够进行 Python 开发, 就需要搭建好 Python 的环境. 需要安装的环境主要是两个部分: 运行环境: Python开发环境: PyCharm 一、安装 Python 1.找到官方网站 官网:Welcome to Python.org 2.找到下载页面 点击download中的Windows 3.选择稳定版中的Win…

【计算机网络】HTTPS

文章目录 1. HTTPS的概念2. 加密常见的加密方式对称加密非对称加密 3. HTTPS的工作过程的探究方案1 —— 只使用对称加密方案2 —— 只使用 非对称加密方案3 —— 双方都是用非对称加密方案4 —— 非对称加密对称加密中间人攻击引入证书CA认证理解数据签名 方案5 —— 非对称加…

Java守护线程的理解及应用

在Java中有两类线程,分别是User Thread(用户线程)和Daemon Thread(守护线程) 。 用户线程很好理解,我们日常开发中编写的业务逻辑代码,运行起来都是一个个用户线程。而守护线程相对来说则要特别…

C#__资源访问冲突和死锁问题

/// 线程的资源访问冲突:多个线程同时申请一个资源,造成读写错乱。 /// 解决方案:上锁,lock{执行的程序段}:同一时刻,只允许一个线程访问该程序段。 /// 死锁问题: /// 程序中的锁过多&#xf…

vscode debug python launch.json添加args不起作用

问题 为了带入参数调试python 程序,按照网上搜到的教程配置了lauch.json文件,文件中添加了"args": [“model” “0” “path”] {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: h…

深入浅出学Verilog--基础语法

1、简介 Verilog的语法和C语言非常类似,相对来说还是非常好学的。和C语言一样,Verilog语句也是由一连串的令牌(Token)组成。1个令牌必须由1个或1个以上的字符(character)组成,令牌可以是&#x…

day3_C++

day3_C 思维导图用C的类完成数据结构 栈的相关操作用C的类完成数据结构 循环队列的相关操作 思维导图 用C的类完成数据结构 栈的相关操作 stack.h #ifndef STACK_H #define STACK_H#include <iostream> #include <cstring>using namespace std;typedef int datat…