Jenkins,原名 Hudson,2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。
官方网站:https://www.jenkins.io/
中文文档:https://www.jenkins.io/zh/
我们以前写完代码,如果要将项目部署到服务器中,那么我们需要经过一系列的更改、打包、上传等繁杂的操作。这些操作很浪费我们的时间,并且基本没什么技术含量。那么jenkins
应运而生。jenkins
只需要我们将写好的项目上传到我们的代码管理仓库中,例如gitlab
,然后jenkins
会自动进行拉取,打包,上传一系列操作,这样就让我们的工作量大大减少,我们只需要专注于业务的操作即可
CI、CD 其实是三个概念,包含了一个 CI 和两个 CD,CI
全称 Continuous Integration,表示持续集成,CD
包含 Continuous Delivery和 Continuous Deployment,分别是持续交付和持续部署。这三个概念之间是有前后依赖关系的。
CI/CD 并不是一个工具,它是一种软件开发实践,核心是通过引入自动化的手段来提高软件交付效率。CI/CD 最终目的:让工程师更快 & 更高质量 & 更简单的交付软件!
具体大家可以看这篇文章:什么是 CI/CD ?
环境需要:Linux虚拟机硬盘20G,内存4G以上
官网下载地址:https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html
现在下载java8
的JDK
需要注册Oracle账户,下载即可,或者联系博主可以给安装包
我们Linux
下记得一定要下载类似这样的包:jdk-8u261-linux-x64.tar.gz
将下载好的tar
包上传到Linux中/usr/java
目录中,如果没有java文件夹,请创建一个
使用解压命令解压我们的tar包
tar -zxvf jdk-8u261-linux-x64.tar.gz
创建一个挂载目录,用于存放jenkins
数据
//创建目录 mkdir -p /usr/docker/jenkins_data mkdir /var/jenkins_home //授权权限 chmod 777 jenkins_home
将我们刚才解压的jdk
移动到jenkins_home
目录下并且改一个比较简短的名字(也可以不改)
mv /usr/java/jdk1.8.261 /var/jenkins_home/jdk1.8
配置JAVA_HOME
环境变量
// 打开profile文件 vim /etc/profile // 配置java环境 JAVA_HOME=/var/jenkins_home/jdk1.8 CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH :wq保存退出 // 使用更新配置文件 source /etc/profile
执行java -version
命令,出现以下内容即成功
下载官网:https://maven.apache.org/download.cgi
将下载后的tar
包一样上传到我们的Linux的/usr/local/
中,这块的目录大家可以自己定,也可以为了省事和博主一样
解压我们的tar
包
tar -zxvf apache-maven-3.9.6-bin.tar.gz
将解压后的文件夹移到jenkins_home
目录下并且改一个比较简短的名字(也可以不改)
mv /usr/local/apache-maven-3.9.6 /var/jenkins_home/apache-maven-3.9.6
进入到/var/jenkins_home/apache-maven-3.9.6/conf
中找到settings.xml
文件,将镜像源换成国内的,这是为了保证我们拉取依赖的速度
${user.home}/.m2/repository org.mortbay.jetty releases ali ali Snapshots ali ali nexus * http://maven.aliyun.com/nexus/content/groups/public/ nexus-public-snapshots public-snapshots http://maven.aliyun.com/nexus/content/repositories/snapshots/ nexus-public-snapshots1 public-snapshots1 https://artifacts.alfresco.com/nexus/content/repositories/public/ development central http://central true always true always central http://central true always true always public-snapshots public-snapshots http://public-snapshots false true always public-snapshots http://public-snapshots false true always development public-snapshots
配置maven
环境
// 打开profile文件 vim /etc/profile // 配置java环境 export MAVEN_HOME=/var/jenkins_home/apache-maven-3.9.6 export PATH=${MAVEN_HOME}/bin:${PATH} :wq保存退出 // 使用更新配置文件 source /etc/profile
执行mvn -v
命令,出现以下内容即成功
首先我们需要安装Docker
,这里不再进行赘述,关于Docker
的安装我在之前的博客中多次提到,不会的同学可以去看之前的文章,有详细的Docker
教程
docker
拉取镜像,注意指定版本号,否则拉取的是比较旧的版本
docker pull jenkins/jenkins:2.426.2-lts
我们刚才已经创建了挂载目录,所以这里直接执行创建容器
docker run -d -p 8082:8080 -p 50000:50000 -v /usr/docker/jenkins_data:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock --restart=on-failure -u 0 --name myjenkins jenkins/jenkins:2.426.2-lts
指令解析:
-d
:后台运行容器
-p
:端口映射, 左边是本地端口,右边是docker容器端口 ,8080是Jenkins Web 界面的工作端口,50000是JNLP(Java Network Launch Protocol)工作端口。这个端口用于 Jenkins 节点和主控节点之间的通信。
-v
:目录挂载,将主机上的 /usr/docker/jenkins_data 目录挂载到容器内的 /var/jenkins_home 目录,用于持久化 Jenkins 的数据。/etc/localtime:/etc/localtime:将本地主机上的时区信息文件挂载到容器内的 /etc/localtime 文件中,确保容器内的时间与主机上的时间一致
-v /usr/bin/docker:/usr/bin/docker
: 将主机上的 /usr/bin/docker 文件挂载到容器中的 /usr/bin/docker,这样容器内的 Jenkins 可以直接使用宿主机上的 Docker 命令。在使用 GitLab/Jenkins 等 CI 软件的时候需要使用 Docker 命令来构建镜像,需要在容器中使用 Docker 命令;通过将宿主机的 Docker 共享给容器
-v /var/run/docker.sock:/var/run/docker.sock
: 将主机上的 Docker socket 文件挂载到容器中的相同位置,这样容器内的 Jenkins 可以与宿主机上的 Docker 引擎进行通信。
–restart=on-failure
:设置容器的重启策略为在容器以非零状态退出(异常退出)时重启。
-u 0
:将容器内进程的用户身份设置为 root 用户,等同于-u root。
–name myjenkins
:给容器指定一个名称为 myjenkins。
极其重要!!!!!!!!!!刚才我们将jdk、maven
放到了jenkins_home
下,这里我们需要将其放到我们的数据卷中,也就是刚才创建的/usr/docker/jenkins_data
目录下
cp -r /var/jenkins_home/jdk1.8 /usr/docker/jenkins_data cp -r /var/jenkins_home/apache-maven-3.9.6 /usr/docker/jenkins_data
这是因为docker
和我们的主机是有环境隔离的,我们要将其映射到docker
中,这样jenkins
才能找到jdk
和maven
验证Jenkins容器是否启动成功
docker ps
获取管理员密码
查看日志
docker logs myjenkins
开始使用
在浏览器中输入192.168.48.133:8082
这里的ip
地址是和自己的虚拟机ip
地址一样的,端口号是刚才创建容器时指定的端口号
然后稍等一会,就会出现以下样式,然后输入进去我们的密码
然后出现新手入门,选择推荐插件
等一会基本就下载完毕了,随后让我们创建一个账户,正常创建即可,然后就下一步最后我们的jenkins
页面就出来了
这里我们下载的还是比较旧的jenkins
,这样会导致我们在下载插件的时候,很多插件由于版本的问题,下载不了,会报错。经过多方面尝试,实际上我们用docker
部署jenkins
更为方便快捷
有可能你没有关闭防火墙,或者可以不关闭,开放8080端口即可,或者也有可能你此时此刻某一个进程占用了8080端口
# 关闭 systemctl stop firewalld # 禁止开机启动防火墙 systemctl disable firewalld
因为我们要构建的是一个Maven
项目,jenkins
默认插件没有maven
,所以我们需要去下载
在这里搜索安装maven,选择第一个安装即可,这里因为我安装过了,所以无法再次安装
yum install -y git
随后回到首页,点击新建item
输入一个名称,选择maven项目,点击确定即可
如果你是gitlab
,接下来需要更换你的分支名称,因为gitlab
默认分支名称是main
这里的Root POM
中填写自己在代码仓库中项目中pom.xml
文件在哪里,就填写哪里,我的就在java-project
下,就直接pom.xml
就可以了
这里Git、Build
配置都在创建的项目item
中的配置中
Maven、JDK
配置在系统管理中的全局工具配置中
都准备好,我们点击构建
可以在控制台看到输出效果
这里可以看到是在/var/jenkins_home/workspace/first/target/
下生成了一个jar
包,但是这里这个目录是jenkins
容器中的,实际上映射到了/usr/docker/jenkins_data/workspace/first/target
进入到jenkins容器中就可以看到日志上打印出来的结果
执行以下命令,在页面访问即可出现项目中的结果
java -jar SpringBootHelloWord-1.0-SNAPSHOT.jar