Jenkins 学习笔记

以前经常误解 Jenkins 需要大量的 Java 基础,对于 Jenkins 一直心存抵触。现在学了之后发现…其实对 Groovy 的要求蛮高的。

安装

  1. 添加 Yum 仓库源并安装 Jenkins
    # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
    # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    # yum install jenkins
    
  2. 保证 Java 版本在 8 或以上
    # yum install java
    
  3. 在系统中创建 Jenkins 用户
    # addusr deploy && su deploy
    
  4. 更改 Jenkins 启动用户与端口
    !# vi /etc/sysconfig/jenkins
    JENKINS_USER = deploy
    JENKINS_PORT = 8080
    
  5. 修改 Jenkins 属主
    # chown -R deploy:deploy /var/lib/jenkins
    # chown -R deploy:deploy /var/log/jenkins
    # chown -R deploy:deploy /var/cache/jenkins
    
  6. 修改 Nginx 相关配置
    location / {
     proxy_pass http://localhost:8081;
     proxy_set_header   Host    $host:81;
     proxy_set_header   X-Real-IP   $remote_addr;
     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header   X-Forwarded-Port 81;
     proxy_set_header        X-Forwarded-Proto $scheme;
     proxy_read_timeout      90;
     }
    
  7. 启动 Jenkins
    /sbin/chkconfig jenkins on
    service jenkins start
    
    注:当启动失败时,可在 /var/lib/jenkins/ 查看输出的错误报告

使用 Pipeline job 构建配置

基本概念

  • Stage:一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。
  • Node:节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行期环境。
  • Step:步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。

简单实例

stage 'build'
node {
     git 'https://repo.address/todo-api.git'
     withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
          sh "mvn -B –Dmaven.test.failure.ignore=true clean package"
     }
     stash excludes: 'target/', includes: '**', name: 'source'
}
stage 'test'
parallel 'integration': {
     node {
          unstash 'source'
          withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
               sh "mvn clean verify"
          }
     }
}, 'quality': {
     node {
          unstash 'source'
          withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
               sh "mvn sonar:sonar"
          }
     }
}
stage 'approve'
timeout(time: 7, unit: 'DAYS') {
     input message: 'Do you want to deploy?', submitter: 'ops'
}
stage name:'deploy', concurrency: 1
node {
     unstash 'source'
     withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
          sh "mvn cargo:deploy"
     }
}

与 Git 集成 (思路同与 Maven 集成)

  1. 配置 Jenkins 本地 Gitlab DNS
  2. 安装 Git client, Curl 及其工具依赖
  3. 在 Jenkins 后台添加 Git Client Users 与 Email
  4. 在 Jenkins 后台添加 Git Credential 凭据
  5. 在 Freestyle 中找到源码管理,输入 Gitlab 地址以及之前配置好的 Credential 即可。

与 Ansible 集成

主要思路是创建一个 Shell 脚本,代码范例如下。
#! /bin/sh

set +x
source /home/deploy/env/bin/active
source /home/deploy/env/ansible/hacking/env-setup -q

cd /home/deploy
ansible --version
ansible-playbook --version

cat inventoryfiles

ansible -i inventoryfiles servername -m command -a "ip addr"
set -x

推荐插件

  1. Git Parameter
  2. Build Name and Description Setter
  3. user build vars
  4. Jenkins Simple Theme Plugin (界面美化)

参考资料

评论