jenkins学习

一、jenkins介绍

1.介绍

Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能

2.特点

  • 开源的Java语言开发持续集成工具,支持持续集成,持续部署。
  • 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
  • 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
  • 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
  • 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
  • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

2.官网

http://jenkins-ci.org/

二、jenkins安装和环境的配置

1.项目架构

说明
服务器列表
名称 IP地址 安装软件
gitlab服务器 192.168.35.136 Gitllab-12.4.2
jenkins服务器 192.168.35.137 Jenkins-2.346.3、Jdk1.8/Jdk11、Maven3.9.8、Git
测试服务器 192.168.35.138 jdk1.8

2.gitlab安装

  1. 安装相关依赖
bash 复制代码
yum -y install policycoreutils openssh-server openssh-clients postfix
  1. 启动ssh服务&设置为开机启动
bash 复制代码
systemctl enable sshd && sudo systemctl start sshd
  1. 设置postfix开机自启,并启动,postfix支持gitlab发信功能
bash 复制代码
systemctl enable postfix && systemctl start postfix
  1. 关闭防火墙
bash 复制代码
systemctl stop firewalld
systemctl disable firewalld
  1. 下载gitlab包,并且安装

下载

bash 复制代码
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm

安装

bash 复制代码
rpm -i gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm
  1. 修改gitlab配置
bash 复制代码
vi /etc/gitlab/gitlab.rb

修改gitlab访问地址和端口,默认为80,我们改为82

bash 复制代码
external_url 'http://192.168.35.136:82
nginx['listen_port'] = 82
  1. 重载配置及启动gitlab
bash 复制代码
gitlab-ctl reconfigure
gitlab-ctl restart
  1. 把端口添加到防火墙
bash 复制代码
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload

启动成功后,在浏览器输入:192.168.159.100:82 看到以下修改管理员root 的页面,修改密码为:root123456 后,然后登录即可,注意:gitlab一开始启动的时候会有点慢,会报502页面,这是正常的,等一会儿,就会到登录界面了。


3.gitlab的使用

1. 服务器端的命令
复制代码
1.gitlab-ctl start			# 启动所有gitlab组件
2.gitlab-ctl stop
3.gitlab-ctl restart
4.gitlab-ctl status			# 查看服务状态
5.gitlab-ctl reconfigure	# 启动服务
6.vim /etc/gitlab/gitlab.rb	# 修改默认的配置文件
7.gitlab-ctl tail			# 查看日志
8.gitlab-rake cache:clear  	# 清理缓存
2. gitlab客户端使用

切换中文

添加组

使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理。

创建用户

创建用户的时候,可以选择Regular或Admin类型。

  • Regular: 普通用户,只能访问属于他的组和项目
  • Admin:管理员,可以访问所有组和项目

创建完用户后,立即修改密码。

将用户添加到组

Gitlab用户在组里面有5种不同权限:

  • Guest:可以创建issue、发表评论,不能读写版本库。
  • Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限。
  • Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限。
  • Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限。
  • Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限。

创建项目

配置SSH,使git工具可以连接gitlab服务器

在需要通过git连接到gitlab的电脑上执行下面的命令

bash 复制代码
ssh-keygen -t rsa -b 4096 -C "admin@example.com"

然后会生成文件

  • linux系统在用户的根目录下面:/root/.ssh;使用ls -a查看
  • windows系统在C:\Users\Lenovo.ssh查看

参考

idea中代码上传Gitlab

三、jenkins构建项目

1. jenkins安装

  1. 安装jdk11

Jenkins需要依赖JDK,所以先安装JDK11

bash 复制代码
yum install java-11-openjdk* -y 

安装目录为:/usr/lib/jvm

  1. 安装jenkins(最好选择最新版本)
    下载页面:https://jenkins.io/zh/download/
    安装文件:jenkins.war
  2. 把安装包上传到192.168.35.137服务器,进行安装
bash 复制代码
java -jar jenkins.war
  1. 打开浏览器访问 http://192.168.35.137:8080/
  2. 获取并输入admin账户密码
bash 复制代码
cat /root/.jenkins/secrets/initialAdminPassword
  1. 安装默认插件
  2. 创建管理员账户

2. maven安装

  1. 下载地址:https://maven.apache.org/download.cgi
  2. 选择apache-maven-3.9.8-bin.tar.gz
  3. 解压
bash 复制代码
tar -zxvf apache-maven-3.9.8-bin.tar.gz
  1. 配置maven环境变量
bash 复制代码
vim /etc/profile

填写下面内容

bash 复制代码
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/export/server/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
  1. 使环境变量生效
bash 复制代码
source /etc/profile
  1. 校验jdk和maven是否安装成功
bash 复制代码
java -version
mvn -version

3. git安装

bash 复制代码
# 安装
yum install git -y
# 安装后查看版本 
git --version 

4. jenkins使用

1.汉化插件安装

在输入框中搜索

Sumbit后,在浏览器输入: http://192.168.35.137:8080/restart ,重启Jenkins

2. 用户权限关联插件
  1. 我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限
  2. 开启权限全局安全配置
    Jenkins->Manage Jenkins->Security,授权策略切换为"Role-Based Strategy",保存。
3. 创建角色

Jenkins->Manage Jenkins->Manage and Assign Roles,点击"Manage Roles"

  • Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
  • Project roles(项目角色):针对某个或者某些项目的角色
  • Slave roles(奴隶角色):节点相关的权限

我们添加以下三个角色:

  • baseRole:该角色为全局角色。这个角色需要绑定Overall下面的Read权限,是为了给所有用户绑定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission
  • role1:该角色为项目角色。使用正则表达式绑定"test.*",意思是只能操作test开头的项目。
  • role2:该角色为项目角色。绑定"chenmin.*",意思是只能操作chenmin开头的项目。
4. 创建用户

Jenkins->Manage Jenkins->Manage Users,点击新建用户:

新建2个用户,一个chenmin,一个test,然后进入角色页面进行用户角色分配:

  • chenmin绑定baseRole角色和role1角色
  • test绑定baseRole角色和role2角色

Jenkins->Manage Jenkins->Manage and Assign Roles,点击Assign Roles进行角色分配

5. 测试项目权限

使用管理员账户创建2个项目。

分别登录两个新创建的用户:

  • chenmin用户只能看到chenmin-login项目
  • test用户只能看到test-login项目
6. 凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。

安装Credentials Binding插件

要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件.



可以添加5中凭证:

  • Username with password:用户名和密码
  • SSH Username with private key: 使用SSH用户和密钥
  • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式

常用的凭证类型有:Username with password(用户密码)和SSH Username with private key(SSH密钥)

接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins的如何管理Gitlab的凭证。

7. 安装Git插件和Git工具

为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOS7上安装Git工具。

安装了3个git相关的工具,默认只能选择一个

8. 创建凭证
  1. 用户密码类型
  2. SSH密钥类型
9.全局工具配置关联JDK和Maven

Jenkins->Global Tool Configuration->JDK->新增JDK,配置如下:

Jenkins->Global Tool Configuration->Maven->新增Maven,配置如下:

添加Jenkins全局变量

Manage Jenkins->Configure System->Global Properties ,添加三个全局变量 JAVA_HOME、M2_HOME、PATH+EXTRA


10. 修改Maven的settings.xml
bash 复制代码
vim /export/server/maven/conf/setting.xml

添加

bash 复制代码
<localRepository>/export/server/repository</localRepository>

<mirror>
		<id>alimaven</id>
		<name>aliyun maven</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		<mirrorOf>central</mirrorOf>
	</mirror>
		
      <mirror>
          <id>alimaven</id>
          <name>central</name>
          <url>aliyun maven</url>
          <mirrorOf>http://maven.aliyun.com/nexus/content/repositories/central/</mirrorOf>
      </mirror>
        <mirror>
            <id>central</id>
            <name>Maven Repository Switchboard</name>
            <url>http://repo1.maven.org/maven2/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        <mirror>
            <id>repo2</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo2.maven.org/maven2/</url>
        </mirror>
        <mirror>
            <id>ibiblio</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
        </mirror>
        <mirror>
            <id>jboss-public-repository-group</id>
            <mirrorOf>central</mirrorOf>
            <name>JBoss Public Repository Group</name>
            <url>http://repository.jboss.org/nexus/content/groups/public</url>
        </mirror>
        <!-- 中央仓库在中国的镜像 -->
        <mirror>
            <id>maven.net.cn</id>
            <name>oneof the central mirrors in china</name>
            <url>http://maven.net.cn/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
11. jdk动态切换
bash 复制代码
update-alternatives --config java

四、jenkins构建项目细节

1. Jenkins构建的项目类型介绍

Jenkins中自动构建项目的类型有很多,常用的有以下三种:

  • 自由风格软件项目(FreeStyle Project)
  • Maven项目(Maven Project)
  • 流水线项目(Pipeline Project)

每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)

2.常用的构建触发器

Jenkins内置4种构建触发器:

  • 触发远程构建
  • 其他工程构建后触发(Build after other projects are build)
  • 定时构建(Build periodically)
  • 轮询SCM,会查看gitlab中源代码是否发生变化,变化就触发(Poll SCM)

3. 构建maven项目

  1. 源码管理

  2. 构建触发器

    通过http://192.168.35.137:8080/job/first/build?token=123123

    或者 http://192.168.35.137:8080/buildByToken/build?job=first\&token=123123自动构建

  3. 前缀步骤

    Exec command中的命令:

bash 复制代码
rm -rf server
rm -rf dockerfile

docker stop user
docker rm user
docker rmi user-image
  1. 后缀步骤

4. Pipeline流水线构建类型

Pipeline简介

  1. 概念

    Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。

  2. 使用Pipeline有以下好处(来自翻译自官方文档):

    代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。

    持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。

    可停止:Pipeline可接收交互式输入,以确定是否继续执行Pipeline。

    多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能。

    可扩展:Pipeline插件支持其DSL的自定义扩展 ,以及与其他插件集成的多个选项。

  3. 如何创建 Jenkins Pipeline呢?

    Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy

    Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法

    Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfile Pipeline 这种方法)。

安装Pipeline插件

Manage Jenkins->Manage Plugins->可选插件

安装插件后,创建项目的时候多了"流水线"类型

流水线->选择HelloWorld模板

  • stages:代表整个流水线的所有执行阶段。通常stages只有1个,里面包含多个stage
  • stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。
  • steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。

编写一个简单声明式Pipeline:

bash 复制代码
pipeline {
    agent any
    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
            }
        }
        stage('编译构建') {
            steps {
                echo '编译构建'
            }
        }
        stage('项目部署') {
            steps {
                echo '项目部署'
            }
        }
    }
}

输出结果:

想看阶段构建视图下载插件:Pipeline Stage View

下载插件:blue Ocean



Pipeline Script from SCM

刚才我们都是直接在Jenkins的UI界面编写Pipeline代码,这样不方便脚本维护,建议把Pipeline脚本放在项目中(一起进行版本控制)


5. 邮件发送

  1. 安装插件Email Extension Plugin
  2. 在项目里打开配置邮件
  3. 配置邮件

6. 参考资料

  1. 感谢博主Linging_24,Jenkins的快速入门
  2. jenkins视频
相关推荐
佐杰4 小时前
什么是DevOps
运维·devops
CaracalTiger4 小时前
本地部署 Stable Diffusion3.5!cpolar让远程访问很简单!
java·linux·运维·开发语言·python·微信·stable diffusion
梁萌5 小时前
linux中使用docker安装MySQL
linux·运维·docker·容器·mysql安装
文言一心5 小时前
SenseVoice 离线部署指南(Xinference Docker v1.12)
运维·docker·ai·容器
AIchiNiurou5 小时前
mermaid install for free docker
运维·docker·容器
wei_shuo5 小时前
智能运维×低资源占用:金仓数据库助力能源企业降本增效与国产化替换实践
运维·数据库·king base
❀͜͡傀儡师5 小时前
根据docker服务保存日志脚本,时间可选版本
运维·docker·容器
搬砖的小码农_Sky5 小时前
Ubuntu Desktop Linux 文件和文件夹操作命令详解
linux·运维·ubuntu
落日漫游5 小时前
Ansible主机清单:自动化管理的核心基石
运维·ansible
gpfyyds6666 小时前
配置dns主从服务。要求从服务器能够定时从主服务器同步数据。
运维·服务器