Day 67 应用工具_Jenkins 构建自由风格的软件项目

构建自由风格的软件项目

创建项目

构建作业是一个持续集成服务器的基本职能,形式多种多样,可以是编译和单元测试,也可能是打包及部署,或者是其他类似的作业。在 Jenkins 中,构建作业很容易建立,而且根据你的需要你可以安装各种插件,来创建多种形式的构建作业,下面我们先来学习创建自由式构建作业。
自由式的构建作业是最灵活和可配置的选项,并且可以用于任何类型的项目,它的配置相对简单,其中很多配置在的选项也会用在其他构建作业中。
在 Jenkins 主页面,点击左侧菜单栏的“新建”或者“New job”。

 进入创建 job 页面

注意:
1、job 名称需要有规划,以便于后面的权限管理。
2、创建 job 后不要轻易更改名称,因为 jenkins 一切皆文件,很多关于 job 的文件,都是以该名称命名,当你改名后,一般不会删除旧文件,而是会再重新创建一份新的文件。
3、输入 job 名称,选择类型后,点击 OK 后创建 job,进入 job 配置页面,此时在 Jenkins 的主目录下的 jobs 目录已经生成了以你 Job 名称命名的文件夹。

Job 配置页面,主要包括通用配置、源码管理、构建触发器、构建环境、构建、构建后操作等几个部分,根据你选择的构建类型不同,可能配置项会有一些小的差别。

执行 linux 命令、脚本

 首先我们来看通用配置选项

勾选“丢弃旧的构建”,这是我们必须提前考虑的重要方面,就是我们如何处理构建历史,构建作业会消耗大理的磁盘空间,尤其是你存储的构建产物(比如执行 java 构建时会生成的 JAR、WAR 等)

该选项允许你限制在构建历史记录的作业数。你可以告诉 Jenkins 只保留最近的几次构建,或者只保留指定数量的构建,此外,Jenkins 永远不会删除最后一个稳定和成功的构建。具体数据的指定要根据你项目的实际情况而定,我一般设置为 5 5 。


下拉至“构建”部分

添加构建操作,选择"execute shell"

 保存设置后,回到 job 主页面

 点击“立即构建”,执行 job 的构建任务,我们的 job 就是执行一条 linux 命令

 

 点击下拉菜单的"console output"

在上面的控制台输出内容中,我们可以看到 job 执行时的当前工作目录为 Jenkins 主目录+workspaces+以 job 名称命名的文件夹,知道这一点对于我们后面写脚本执行部署任务时非常重要。我们也可以通过命令行进行确认。

[root@ci-node2 ~]# cd /var/lib/jenkins/workspace/
[root@ci-node2 workspace]# pwd
/var/lib/jenkins/workspace
[root@ci-node2 workspace]# ll
total 0
drwxr-xr-x 2 jenkins jenkins 15 Aug 5 12:43 My-freestyle-job
[root@ci-node2 workspace]# cd My-freestyle-job/
[root@ci-node2 My-freestyle-job]# ll
total 0
-rw-r--r-- 1 jenkins jenkins 0 Aug 5 12:45 a
[root@ci-node2 My-freestyle-job]#

而且我们进一步也可以看到 job 主页面,工作空间所对应的位置也是此目录。通过这个例子,我们可以联想到,我们可以使用 Jenkins 执行任何 linux 命令,这也就是我们前面讲的要注意 Jenkins 启动用户的配置,如果是 root 用户启动的 Jenknis,那 Jenkins 的安全及权限配置一定要做好控制。我们在学习初期,为了节省时间,可以使用 root 用户启动jenkins。

构建:增加用户

发现报错:因为没有权限增加用户

 

 查看 jenkins 的启动用户,可以把配置文件文件中的 JENKINS_USER 改为 root,然后在构建,就可以成功了。

# 查看启动用户
ps -fe | grep java
vim /etc/sysconfig/jenkins     # JENKINS_USER="jenkins"

# 重启
systemctl restart jenkins

连接 gitlab 获取仓库代码

我们使用上面的 job 进行配置,在“源码管理”部分配置拉取 Gitlab 上的 monitor 仓库,该仓库是一个纯 html 代码项目,首先在 Gitlab 上复制仓库地址

 

然后回到 Jenkins 上 My-freestyle-job 配置页面,下拉到“源码管理”部分,勾选 git 选项

 粘贴完仓库地址后,出现如下图所示错误提示

据提示信息显示为 key 认证失败,因为我们使用的 SSH 方式连接仓库,所以需要配置SSH认证,实际上在前面我们学习Gitlab的时候,我们已经配置了ci-node2这台机子的root用户的公钥在 Gitlab 上的 dev 用户,为什么我们这里还需要认证?下面我们来查看一下Jenkins 服务的启动用户

而我们在Gitlab上配置的root用户的公钥,现在我们有两种方式解决认证失败的问题,
1、在jenkins上配置使用root用户的私钥连接Gitlab,2、配置使用 root用户启动jenkins。

下面我们先来看第一种方式

 

进入认证添加页面

根据提示添加用户认证后,回到配置仓库页面,选择认证方式为新添加的认证,错误消失。

第二种方法:更改 Jenkins 服务的启动用户为 root,编辑 /etc/sysconfig/jenkins 文件,配置 Jenkins 的启动用户为 root,然后重启 Jenkins 服务。

 

 回到 job 的源码配置页面

 我们看到不选择任何认证,也不会出现报错。

加入出现以下报错:

报错:ssh:无法解析主机名gitlab.example.com:名称或服务未知

解决:在 /etc/hosts 文件中加入 192.168.xx.xx gitlab.example.com

保存配置后,回到 job 主页面,点击“立即构建”,构建完成后,我们在工作空间内可以看到从 Gitlab 仓库拉到的代码

 

在“源码管理”配置部分,我们可以配置从分支获取代码,也可以配置从标签获取代码、还可以配置从某一次 commit 获取代码,如下图所示

 

 

安装 httpd  服务

我们在另一台机器上安装 httpd 服务,并配置服务端口为 10001。
Httpd 的配置文件:/etc/httpd/conf/httpd.conf,修改 Listen 80 。
Httpd 服务的默认网站放在/var/www/html 目录下。

启动 Httpd:systemctl start httpd

通过浏览器访问 http://10.0.0.11:1001,可以看到如下页面

配置 ssh 免密登录

因为我们要使用脚本将 git-03 上的程序代码推送到 git-02 上,所以需要配置 git-03 到 git-02 的 ssh 免密码登录。

ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.214.12

Jenkins部署脚本编写

#!/bin/bash
#目标服务器 IP 地址
host=$1

#job 名称
job_name=$2

#包名
name=web-$(date +%F)-$(($RANDOM+10000))

#打包
cd /var/lib/jenkins/workspace/${job_name} && tar czf /opt/${name}.tar.gz ./*

#发送包到目标服务器
ssh ${host} "cd /var/www/ && mkdir ${name}"
scp /opt/${name}.tar.gz $host:/var/www/${name}

#解包
ssh ${host} "cd /var/www/${name} && tar xf ${name}.tar.gz && rm -f ${name}.tar.gz"

#使用软链接方式部署服务
ssh ${host} "cd /var/www && rm -rf html && ln -s /var/www/${name} /var/www/html"

Jenkins 配置构建

接下来我们在 Jenkins 上配置构建执行我们编写的部署脚本,回到 My-freestyle-job 配置页面,配置构建

点击页面上的链接可以查看所有可用的 jenkins 环境变量
保存配置,回到 job 主页面,点击“立即构建”后,访问 httpd 服务的主页面,我们发现服务已经部署成功。

 Git push 触发自动构建

回到 My-freestyle-job 的配置页面,下拉到构建触发器部分

 勾选 gitlab 触发选项,进入具体配置页面,配置完成后,保存配置。

Gitlab  仓库配置 webhooks

进入 Gitlab 中 monitor 仓库的设置页面

 

 进入集成配置页面,复制 jenkins 触发器配置页面的 url 及 Token,配置完成后,在页面下面测试触发设置。

 

 

 配置构建后通知 Gitlab

构建完成后,jenkins 可以把构建的结果反馈给 Gitlab,这样在 Gitlab 上就可以查看每一次 push 后构建的执行结果。
首先在 Jenkins 上配置,可以访问 Gitlab,打开 jenkins 系统管理系统设置页面,下拉找到 Gitlab 部分

 添加认证

在 Gitlab 中 root 用户设置页面,选择左侧 Access Tokens,进入 Access Token 管理页面

认证添加成功后,回到系统设置页面,为 Gitlab 选择认证并测试,成功后保存退出系统设置。

其次,在 job 配置页面添加构建后操作

保存 job 配置,回到 job 主页面,执行“立即构建”。构建成功后,在 Gitlab 仓库,commits
列表页面

 

配置构建发送邮件

每次执行完构建任务后,我们都可以通过邮件来通知相关人员构建的执行情况,具体配置如下

全局配置
在 jenkins 系统管理—>系统设置,
在系统设置中找到 Jenkins Locaction 填好 JenkinsURL 跟系统管理员的邮件地址,注意必填。

 下拉到最下面“邮件通知”部分

注 1、邮箱跟最开始设置的管理员邮箱是一致的,2、密码根据您使用的邮箱进行设置,163、QQ 邮箱,都使用授权码,而不是您的邮件密码。
成功我们可以收到测试的邮件

Job 邮件配置
进入 job 配置页面,下拉至构建后操作部分

 E-mail Notification 选项配置比较简单

 当构建失败后,会发邮件通知

 

 Editable Email Notification 配置

原文地址:https://www.cnblogs.com/ysging/p/12886055.html