zoukankan      html  css  js  c++  java
  • 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 配置

  • 相关阅读:
    《大型网站技术架构》学习笔记——架构演化
    ASP.NET MVC之Html.RenderAction
    设计模式学习笔记——面向对象设计原则
    设计模式学习笔记——类图
    观察者模式
    泛型接口
    泛型的实例化应用
    多线程第二种方式-实现runnable
    对象中的某个属性不希望被序例化--transient
    对象序例化
  • 原文地址:https://www.cnblogs.com/ysging/p/12886055.html
Copyright © 2011-2022 走看看