zoukankan      html  css  js  c++  java
  • gitlab与jenkins结合构建持续集成

    Jenkins是java编写,需要安装JDK,这里采用 yum 安装,对版本有需求的,可以到 oracle 官网下载 JDK。

    yum install -y java-1.8.0-openjdk
    

      

    一、安装 Jenkins

    添加yum源

    sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

    导入密钥

    sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

    安装

    yum install -y jenkins

    新版本的 gitlab 服务端口为 8080,为了不和 gitlab 的服务端口冲突,修改 Jenkins 的默认端口为 8088。

    查看端口

    netstat -antup|grep :80

    修改端口为8088

    vi /etc/sysconfig/jenkins
    JENKINS_PORT="8088"
    

    数据目录,可以自定义
    JENKINS_HOME="/var/lib/jenkins"

    二、启动 Jenkins

    systemctl start jenkins.service

    设置开机启动

    systemctl enable jenkins.service

    如果访问8088端口,发现访问不了,则先查看日志

    cat /var/log/jenkins/jenkins.log

    如果发现这种信息

    java.io.IOException: permission denied

    原因是 Jenkins 默认使用的是 Jenkins 用户,因此日志中出现了权限问题,修改 Jenkins 默认用户为 root。

    vi /etc/sysconfig/jenkins
    JENKINS_USER="root"
    

      

    三、配置jenkins使用gitlab更新代码

    安装插件
    Credentials Plugin # 签名证书管理
    Gitlab Plugin # 安装后从gitlab获取代码
    Git Plugin 和 Git Client Plugin # 用于 jenkins 在 gitlab中拉取源码
    Gitlab Hook # gitlab触发 jenkins 构建项目
    Gitlab Authentication # gitlab和 jenkins 认证相关的插件
    SSH Plugin # 远程执行 shell 脚本
    Publish Over SSH # 通过 ssh 部署应用

    如果 jenkins 安装插件超时,可以在 管理jenkins -> 插件管理 -> 高级 -> 升级站点 改为:

    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

    如果换站点后,还是安装超时,则到下面网站手动下载安装

    http://updates.jenkins-ci.org/download/plugins/
    

      

    四、设置 gitlab 用户 root 可以通过 ssh 公钥直接下载代码

    生成的SSH密钥, 一路回车,注意我这里生成的是 root 用户,当然你也可以指定用户

    ssh-keygen

    查看公钥

    cat ~/.ssh/id_rsa.pub

    然后把公钥添加到 gitlab 项目->设置->版本库->部署密钥
    这样我们通过root用户拉取代码,就不需要输入用户名和密码了。

    git clone git@192.168.1.222:develop/web.git
    

      

    五、Jenkins 添加 gitlab 用户 root 的 私钥

    cat ~/.ssh/id_rsa

    在 凭据 -> 全局 -> 添加凭据 -> 选择类型 SSH Username with private key
    用户名输入 root,并添加私钥

    注意,root用户的公钥在 gitlab,私钥在 jenkins,这样 jenkins 就可以直接拉取 gitlab 上的代码。

    六、在 Jenkins 上添加项目

    新建一个item -> 输入任务名称 -> 选择构建一个自由风格的软件项目,然后点确定。

    然后 描述 根据需要自已填写,源码管理选择 git,并添加仓库URL为 git@192.168.1.222:develop/web.git。
    然后选择凭据为我们刚刚添加的 root,然后点保存。

    七、自动部署 web 项目

    可以通过执行命令或脚本方式进行代码发布,这里演示使用 root 用户在各服务器上发布代码。
    当然也可以建一些普通用户,但需要保持所有服务器上的用户ID一致,避免权限问题。

    比如我想把222主机上的代码自动部署到111主机上,我的222主机上安装了 gitlab 和 jenkins。

    1、首先要实现 root 用户无密码直接登陆111主机。

    将公钥复制到远程主机

    ssh-copy-id root@192.168.1.111
    ssh 192.168.1.111

    为了让 jenkins 登陆本机,也免密码,则在本机也复制一份

    ssh-copy-id root@192.168.1.222

    注意,你需要在哪台机器上自动发布代码,就需要让 jenkins 能使用root用户免密码登陆到那台机器上。

    2、我们在 jenkins 的主机上,先 clone 一份代码

    cd /data
    git clone git@192.168.1.222:develop/web.git

    3、然后编写 shell 执行命令,如 sync.sh

    #!/bin/bash
    echo $USER
    cd /data/web
    git pull
    scp -r ./* root@192.168.1.111:/data/wwwroot/

    4、在 jenkins 项目中点击配置,选择构建环境,增加构建步骤,选择 Execute shell,填入如下命令,并保存。

    sudo ssh root@192.168.1.222 /data/sync.sh

    5、然后点击 项目的 立即构建,看代码是否同步到了111主机上。

    八、实现 gitlab 触发 jenkins 自动部署

    1、安装 gitlab hook plugin 和 Build Authorization Token Root 和 Build Token Trigger 插件。

    2、生成身份验证令牌

    openssl rand -hex 16

    3、在 jenkins 项目 -> 配置 -> 构建触发器 -> 选中远程构建,并填入上一步生成的令牌。

    选中如下两项,然后点保存。
    Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.1.222:8088/project/web
    GitHub hook trigger for GITScm polling

    4、在 gitlab 项目 -> 设置 -> 集成 -> 增加web钩子

    链接URL格式:http://jenkins 地址/buildByToken/build?job=jenkins项目名&token=token值
    如:

    http://192.168.1.222:8088/buildByToken/build?job=web&token=46324e223bc203855552e62dd63b12c9

    5、点击测试,push events,如果返回 201 ,说明成功了。

    6、我们通过 git 添加文件,提交到版本库,看 jenkins 是否会触发自动构建。

    九、使用 Build Pipeline 插件以流程图的形式展示各个 job 的顺序

    Build Pipeline 插件作用: 这个插件能够以流程图的形式展示各个 job 的顺序,依赖关系等等。

    安装完插件后,我们添加一个视图,并选中 Build Pipeline View。

    在 Display Options 中

    No Of Displayed Builds 选择 3 ,

    Refresh frequency (in seconds) 填入 3。

    上面的选项表示显示最近 3 次的构建结果,当然也可根据需要自已填写。

  • 相关阅读:
    异常
    一线互联网大厂,内推吧!
    node-sass 安装失败的解决办法
    上下文执行栈
    1像素边框
    babel需要这样配置
    【webpack】中enforce的使用方法
    【webpack】中resolveLoader的使用方法
    【webpack】中的devtool的使用方法
    【webpack】中splitChunk的使用方法
  • 原文地址:https://www.cnblogs.com/jkko123/p/11626027.html
Copyright © 2011-2022 走看看