Git+Jenkins基本使用
Jenkins是一个开源的实现持续集成的软件工具
持续集成的作用
- 保证团队开发人员提交代码的质量,减轻软件发布的压力
- 自动完成各个环节的任务,无需太多的人工干预,有利于减少重复过程,以节省时间、费用和工作量
持续集成的特点
- 是一个自动化的、周期性的集成测试过程
- 检出代码、编译构建、运行测试、结果记录、测试统计等操作都是自动完成的,无需人工干预
- 需要有专门的集成服务器来执行集成构建
- 需要有代码托管工具支持
持续集成的工作原理
Maven介绍
- 基于项目对象模型(POM),可以通过一小段描述信息管理项目的构建、报告和文档的软件项目管理工具
- 除了以程序构建能力为特色外,还提供高级项目管理工具
- 缺省构建规则有较高的可重用性
Jenkins的部署
操作系统设置
[root@localhost~]# hostnamectl set-hostname jenkins
[root@localhost~]# bash
[root@jenkins~]# systemctl stop firewalld && systemctl disable firewalld
[root@jenkins~]# systemctl stop NetworkManager && systemctl disable NetworkManager
[root@jenkins~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
[root@jenkins~]# setenforce 0
3:安装git
为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOS7上安装Git工具。
[root@jenkins~]# yum install -y git
4:安装java环境
(1)安装java
[root@jenkins~]# yum -y install fontconfig
[root@jenkins~]# tar zxvf jdk-11.0.16.1_linux-x64_bin.tar.gz
[root@jenkins~]# mv jdk-11.0.16.1 /usr/local/java
注意:
Fontconfig是一款字体配置工具,它允许用户在Linux、macOS和Windows等操作系统上配置字体。Fontconfig的设计目标是提供一个易于使用的命令行工具,用于管理字体文件和配置字体。这个包是Jenkins的依赖包,必须安装,否则,jenkins无法启动。
(2)设置java的环境变量
[root@jenkins~]# vim /etc/profile
#在文件末尾添加:
export JAVA_HOME=/usr/local/java/
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
[root@jenkins~]# source /etc/profile
(3)查看java版本
[root@jenkins~]# java -version
java version "11.0.16.1" 2022-08-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.16.1+1-LTS-1)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.16.1+1-LTS-1,mixed mode)
5:安装tomcat
[root@jenkins~]# tar zxvf apache-tomcat-9.0.8.tar.gz
[root@jenkins~]# mv apache-tomcat-9.0.8 /usr/local/tomcat
6:为Jenkins安装maven环境
(1)安装maven
[root@jenkins~]# tar zxvf apache-maven-3.8.6-bin.tar.gz
[root@jenkins~]# mv apache-maven-3.8.6 /usr/local/maven
(2)设置java和maven的环境变量
[root@jenkins~]# vim /etc/profile
#在文件末尾添加:
export JAVA_HOME=/usr/local/java/
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
[root@jenkins~]# source /etc/profile
(3)查看maven版本
[root@jenkins~]# mvn -version
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /usr/local/maven
Java version: 11.0.16.1, vendor: Oracle Corporation, runtime:/usr/local/java
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version:"3.10.0-1160.el7.x86_64", arch: "amd64", family:"unix"
(4)修改maven更新源
[root@jenkins~]# vim /usr/local/maven/conf/settings.xml
#修改maven的仓库:
aliyunmaven
*
阿里云公共仓库
https://maven.aliyun.com/repository/public
备注:
阿里提供了maven更新源,可访问阿里官方网站查看详细信息。
仓库服务
7:为jenkins安装NodeJS
在对NodeJS项目进行构建的时候,需要g++的编译环境,不同的项目NodeJS的版本也不一样,在进行部署的时候要根据项目的依赖版本进行选择。
[root@jenkins~]# yum -y install gcc automake autoconf libtool make
[root@jenkins~]# yum -y install gcc gcc-c++
[root@jenkins~]# tar zxvf node-v14.18.0-linux-x64.tar.gz
[root@jenkins~]# mv node-v14.18.0-linux-x64 /usr/local/nodejs14
[root@jenkins~]# ln -s /usr/local/nodejs14/bin/* /usr/local/bin
四:Jenkins的安装与初始化设置
1:安装Jenkins
[root@jenkins~]# cp jenkins.war /usr/local/tomcat/webapps/
[root@jenkins~]# cd /usr/local/tomcat/bin/
[root@jenkinsbin]# sh startup.sh
[root@jenkinsbin]# netstat -anpt | grep java
tcp6 0 0 :::8009 :::* LISTEN 2609/java
tcp6 0 0 :::8080 :::* LISTEN 2609/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2609/java
将jenkins.war文件保存到Tomcat 服务的 /usr/local/tomcat/webapps目录下。启动 Tomcat 就会自动部署Jenkins。
2:设置jenkins插件更新源
cd /root/.jenkins/updates
sed -i 's/https:\/\/www.jenkins.io/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
注意:
default.json 文件需要jenkins初始化结束才能出来。此处需要稍等片刻。
3:Jenkins初始化
(1)登录Jenkins
访问网址:http://192.168.10.30:8080/jenkins
查看初始密码:
cat/root/.jenkins/secrets/initialAdminPassword
(2)选择插件安装方式
注意:
此处是在安装Jenkins过程中添加插件,也可以使用“选择插件安装”选项,跳过插件安装过程,等待Jenkins安装好后,登录到Jenkins再安装插件。
(3)创建管理员账号
本案例将初始的管理员账号和密码都设置为admin
(4)结束安装
五:Jenkins插件管理
1:修改Jenkins插件安装为国内源地址
在安装Jenkins时,选择默认安装插件会很慢,甚至会失败,因此安装时可以取消所有插件安装,跳过这一步,待Jenkins启动后,修改插件安装地址,安装插件。
(1)设置国内插件源
进入Manage Jenkins–>Plugins—>Advanced settings最下面有Update Site(升级站点),设置为如下链接,并点“提交”按钮。
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
(2)重启Jenkins服务
[root@jenkins~]# /usr/local/tomcat/bin/shutdown.sh
[root@jenkins~]# /usr/local/tomcat/bin/startup.sh
2:安装插件
点击“Manage jenkins”-->“Plugins”-->“Avalable plugins”,输入要安装的插件,并勾选列出来的插件,然后点安装。
在本课程内,可能会用的插件如下所示:
Git Parameter
Git Pipeline for Blue Ocean
GitLab
Blue Ocean
Blue Ocean Pipeline Editor
Blue Ocean Core JS
Pipeline SCM API for Blue Ocean
Dashboard for Blue Ocean
Build With Parameters
extended Choice Parameter
Kubernetes
Kubernetes CLI
Kubernetes Credentials
Image Tag Parameter
Active Choices
SSH
ansible
Maven Integration
Publish Over SSH
Role-based Authorization Strategy
NodeJS
Git
Credentials
Credentials Binding
Dynamic Extended ChoiceParameter Plug-In
Dynamic Parameter Plug-In
Pipeline
Pipeline: Declarative
Localization: Chinese(Simplified)
注意:
红色的在初始化过程中已经安装上去的,此处可以不用再安装,如果在初始过程中没有安装,或安装不完全,此处可以都安装上去,为其他项目的实施提供可用功能。
提示:可以在此处做一个快照,方便后续实验
六:Jenkins角色与权限管理
我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限,在前面的插件安装中已经安装过此插件。
1:开启权限全局安全配置
“Dashboard”-->“Manage Jenkins”-->“Security”-->“Authentication”
将授权策略修改为“Role-BasedStrategy”,并保存设置。
2:创建角色
为了更方便的为用户授权,jenkins中使用角色作为一类权限的容器。角色是一组相关权限的集合。可以为用户指定角色,而不是直接指定权限。
(1)角色种类
Global roles:Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
Item roles:针对某个或者某些项目的角色
Agent roles:节点相关的权限
(2)设置角色
“Dashboard”-->“Manage Jenkins”-->“Manage and Assing Roles”。点击“Manage Roles”
本案例中我们添加三个角色:
Ø baseRole:该角色为全局角色。这个角色需要绑定Overall下面的Read权限,是为了给所有用户绑定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 ismissing the
Overall/Read permission
Ø role1:该角色为项目角色。使用正则表达式绑定"my-item01.*",意思是只能操作名称为“my-item01”开头的项目。
Ø role2:该角色也为项目角色。绑定"my-item02.*",意思是只能操作“my-item02”开头的项目。
(3)添加baseRole角色到Global roles
(4)添加role1和role2角色到Item roles
在“Role to add”中填写角色名称“role1”;“Pattern”中填写“my-item01.*”,表示role1的角色只能管理“my-item01.*”开头的项目添加好后点Save保存。
3:创建用户
(1)添加新用户
“Dashboard”-->“Manage Jenkins”-->“Users”,在右上角点击“Create User”,创建用户。
(2)填写账号信息
(3)创建好后的效果
4:给用户分配角色
“Dashboard”-->“Manage Jenkins”-->“Manage and Assign Roles”,然后点击“Assign Roles”。进入到分配角色的界面。
(1)为zhangsan用户绑定baseRole和role1角色
在“Global roles”中点击“Add User”按钮,在弹框中输入用户zhangsan,确定后勾选角色baseRole;
在“Item roles”中点击“Add User”按钮,在弹框中输入用户zhangsan,确定后勾选角色role1。
(2)为lisi用户绑定baseRole和role2角色
用同样的方法为lisi设置角色。
在“Global roles”中点击“Add User”按钮,在弹框中输入用户lisi,确定后勾选角色baseRole;
在“Item roles”中点击“Add User”按钮,在弹框中输入用户lisi,确定后勾选角色role2。
设置好后,点击Save保存。
5:创建项目测试权限
(1)创建项目
用管理员的权限创建两个项目,名字分别是my-item01-zhangsan和my-item02-lisi
(2)分别用zhangsan和lisi的身份登录系统
可以发现,每个用户只能管理属于自己角色范围内的项目。
七:Jenkins凭证管理
有许多第三方网站和应用程序可以与 Jenkins 进行交互,例如程序代码仓库,云存储系统和服务等。
此类应用程序的系统管理员可以在应用程序中配置凭据以专供 Jenkins 使用。通常通过将访问控制应用于这些凭据来完成这项工作,以“锁定”Jenkins可用的应用程序功能区域。一旦Jenkins 管理员(即管理 Jenkins 站点的 Jenkins 用户)在 Jenkins 中添加/配置这些凭据,Pipeline 项目就可以使用凭据与这些第三方应用程序进行交互。
用管理员登录到jenkins。
要在Jenkins使用凭证管理功能,需要安装CredentialsBinding插件,前面已经安装过此插件,这里不再安装。
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。
1:凭据的种类
jenkins提供了多种类型的凭据,适应与不同的业务需求,具体类型如下:
Ø Username with password:用户名和密码
Ø GitHub App: GitHub 应用进行身份验证
Ø GitLab API token:存储Gitlab的用户API token
Ø OpenShift Username and password:存储OpenShift的用户名和密码
Ø SSH Username with private key: 使用SSH用户和密钥
Ø Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret
file就会被删除。
Ø Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
Ø Certificate:通过上传证书文件的方式
其中,常用的凭证类型有:Username with password(用户密码)和SSHUsername with private key(SSH密钥) 。接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins的如何管理Gitlab的凭证。
注意:为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOS7系统上安装Git工具。
2:凭据的作用范围
凭证具有与它们相关联的范围。这是一种表示它们如何才能被暴露的方式。Jenkins 使用的主要范围有如下2种。
(1)System(系统)
顾名思义,这个范围与根上下文,也就是 Jenkins 系统相关联。此范围中的凭证只被暴露给系统和后台任务,并且一般被用于连接到构建节点或代理节点等。
(2)全局
全局范围是默认选项,通常用来确保 Jenkins 中的任务可以使用凭证。
1:添加用户密码类型的凭据
(1)添加凭据
“Manage jenkins”-->“Credentials”,打开如下页面,并点击“System”,进入全局凭据管理界面,如下图所示。
在如下界面中,点击右上角的“AddCredentials”按钮,添加凭据
(2)填写凭据参数
这里主要的内容有:
凭据类型:Username with password
范围:Global
用户名:root(该账号是gitlab中添加的账号)
密码:gitlab中为root用户设置的密码(本案例此处为pwd12345,注意不是系统的root密码)
ID:选填(设置凭据的唯一标识,不设置会自行分配一个唯一标识)
描述:选填(凭据名称,此处最好填写一下,使用凭据的时候便于识别,不设置就使用用户名)
点击Create创建此凭据,添加结果如下:
(3)测试凭据
1)到gitlab中添加一个项目
登录到gitlab,导入项目(本案例使用root用户登录)。导入gitee上的项目,访问级别使用私有类型,链接如下:
wangjunqing/league
2)复制出HTTP的仓库URL
http://192.168.10.105/root/league.git
3)创建测试项目test01
创建一个FreeStyle项目:新建Item->FreeStyle Project->确定
3)源码管理中设置仓库URL和凭据
在源码管理中点“Git”,代码仓库的URL为http://192.168.10.105/root/league.git。
并选择Gitlab中root的凭据。最后保存设置。
4)测试代码拉取
点击Build Now,立即构建此项目。可以在控制台输出查看构建日志。
4)查看拉取到jenkins主机中的代码
在jenkins主机的工作空间目录下,已经能够看到代码拉取到了jenkins主机本地。
[root@jenkins~]# ls /root/.jenkins/workspace/
test01 test01@tmp
2:添加SSH类型的凭据
SSH类型的凭据可以使Jenkins在拉取gitlab中的代码时使用秘钥对的方式,不仅实现了免密连接,同时也会对数据进行加密,是一种安全可靠的凭据方式。
(1)在jenkins主机上以root身份生成密钥对
[root@jenkins~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:eTCFVG4OyBd6pleEkgTmiQWXpdEdM8bx3oVPXY1j+4U root@jenkins
The key's randomart image is:
+---[RSA 2048]----+
| ..**o=O*+ .o|
| *.=++=O .+.o|
| . + +.B = ..o+.|
| = X . +E .|
| . S + . ...|
| . . .|
| |
| |
| |
+----[SHA256]-----+
(2)复制公钥
[root@jenkins~]# cd .ssh/
[root@jenkins.ssh]# ls
id_rsa id_rsa.pub
其中id_rsa为私钥文件,id_rsa.pub为公钥文件。
(3)将公钥存放到gitlab
用root用户登录gitlab,点击右上角的头像,在下拉菜单中点“preferences”,然后在左侧列表点击“SSH Keys”。
添加成功后的效果如下如图所示:
(4)在jenkins中添加SSH凭据
“Manage jenkins”-->“Credentials”,打开如下页面,并点击“System”,进入全局凭据管理界
(5)填写SSH凭据参数
这里主要的参数有:
类型:SSH
范围:Global
ID:可选
描述:可选
Username:root(这个秘钥对是用root的身份生成的)
Private Key:填写root生成的私钥。
(6)添加好的状态如下
(7)测试凭据
1)到gitlab中查看SSH的仓库链接,并复制下来
以root的身份登录到gitlab,并复制出SSH的仓库URL。
git@192.168.10.105:root/league.git
2)创建测试项目test02
3)在源码管理中设置git参数
将仓库的ssh链接粘贴到仓库URL处,并在下面选择ssh凭据。
注意:
在使用秘钥对时,要提前在jenkins主机上生成gitlab主机的fingerprint,否则,此处会提示错误。错误信息如下:
可以用jenkins主机的ssh命令连接一次gitlab主机,第一次连接的话可以看到提示: “Are you sure you want to continue connecting(yes/no)? yes”,输入yes并回车即可生成gitlab主机的fingerprint。另外,如果使用秘钥对的凭据,在选择凭据的地方选择我“无”也可以。
4)构建项目测试
点击“Build New”,查看构建结果。
5)查看工作区域
[root@jenkins~]# ls /root/.jenkins/workspace/
test01 test01@tmp test02 test02@tmp
此处已经将gitlab中的项目拉取到了Jenkins本地。