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 配置