XuLizhao 's Notes

时光,漫步


  • 首页

  • 技术

  • 文档

  • 关于

  • 搜索
close

Jenkins持续集成工具

时间: 2017-11-30   |   分类: Tech     |   阅读: 1332 字 ~3分钟

时不时会和持续集成工具Jenkins打交道.

安装

直接安装系统安装包

推荐安装方式,以Ubuntu为例:

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo vi /etc/apt/sources.list.d/jenkins.list
# 添加
deb https://pkg.jenkins.io/debian-stable binary/


sudo apt-get update
sudo apt-get install jenkins

用Docker容器的方式安装

注: 用容器的方式看似更方便,但实际使用中由于Jenkins经常会调用外部工具, 比如在Jenkins(容器里)调用docker, 会增加使用的复杂度,不太推荐这种方式.

docker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
# 为了在jenkins调用docker,需要在上面命令行增加两个文件映射
# -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker 

初始密码文件通常位于/var/lib/docker/volumes/jenkins_home/_data/secrets/initialAdminPassword

更多配置参考官方文档.

常用配置

git添加ssh key

  1. 首先生成Jenkins用户的ssh-key
  2. 在git仓库设置项添加公钥以只读权限. 通常位于[Repository settings]-[Access keys].
# 登录Jenkins机器
su - jenkins
ssh-keygen -t rsa -P ''

修复错误 stderr: Host key verification failed

复制ssh公钥到 .ssh文件夹, 对于Ubuntu在/var/lib/jenkins/.ssh, 可能需要相应的修改文件夹权限.

传递参数

#!/usr/bin/env bash
pipenv run python3 -m pytest tests/test_smoke.py -x --html=report.html --junitxml=junit-report.xml

调用docker解决权限问题

如果遇到"permission denied"错误,需要把jenkins加到docker用户组里:

sudo usermod -a -G docker jenkins

Android 构建

android update project -p <project_path>

# 更新SDK
./tools/android update sdk --no-ui

修改时区

-Duser.timezone=“Asia/Chongqing”

流水线/Pipeline

CD(Continous Delivery) 引入了流水线/工作流的概念,即可以把构建,测试,部署分阶段执行, 最终实现产品的持续部署.
Jenkins通过官方插件支持两种任务: 流水线和多分支流水线.
具体的流水线任务通过脚本的形式定义, 使用的语法为Groovy, 看起来还是很简洁的.
一个例子如下,大致层次为 pipeline-stage-step:

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                retry(3) {
                    sh './flakey-deploy.sh'
                }

                timeout(time: 3, unit: 'MINUTES') {
                    sh './health-check.sh'
                }
            }
        }
    }
}

添加Slave

sudo useradd -d /var/lib/jenkins jenkins
sudo passwd jenkins

详细可参考这里

Python API调用

无认证

import requests

api_url = "http://jenkins.xulizhao.com/job/test_job/api/json?tree=lastSuccessfulBuild[number]"
r = requests.get(api_url)
build_number = r.json()['lastSuccessfulBuild']['number']

需要认证

# 先安装依赖库
pip install python-jenkins

# 代码示例
import jenkins

server = jenkins.Jenkins('http://jenkins.xulizhao.com', username='user', password='password')
last_build_number = server.get_job_info('test_job')['lastSuccessfulBuild']['number']

curl方式

# 检索最近变更记录
curl -u xulz:0f945a8f -s "http://jenkins.xulizhao.com/job/test-job/123/api/xml?wrapper=changes&xpath=//changeSet//comment"



比较遗憾的是Jenkins 的API Token只适用于构建job,其他接口需要用户名/密码登录.

* build_job_url(name, parameters=None, token=None)
* build_job(name, parameters=None, token=None)

调试

脚本调试

访问<JENKINS_URL>/script, 输入要调试的内容

# 查看遗忘的credentials密码
println( hudson.util.Secret.decrypt("${ENCRYPTED_PASSPHRASE_OR_PASSWORD}") )

Build step ‘Execute shell’ marked build as failure

在"Execute Shell"中添加#!/bin/bash

注:默认情况下,Jenkins采取/bin/sh -xe这种方式-x将打印每一个命令。另一个选项-e,当任何命令以非零值(当任何命令失败时)退出代码时,这会导致shell立即停止运行脚本。

常用插件

  • Email Extension Plugin: 邮件增强扩展
  • Extended Choice Parameter Plug-In: 参数选择扩展
  • EnvInject plugin : 传递构建参数和环境变量
  • Build Monitor View: 监控

报告

  • Junit Publisher

HTML Publisher

加载页面脚本报错

the document’s frame is sandboxed and the ‘allow-scripts’ permission is not set

解决方法:

进入管理项-Script Console,执行

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; default-src 'self'; style-src 'self' 'unsafe-inline';")
# 恢复默认值
System.clearProperty("hudson.model.DirectoryBrowserSupport.CSP")

参考:

  • HTML Publisher: HTML Publisher插件不显示CSS的解决
  • Jenkins Content Security Policy/官方文档

扩展阅读

  • Jenkins官方网站
  • GoCD :另一个持续交付工具
  • pipeline构建参数的使用

使用接口

  • Jenkins API使用文档
  • python-jenkins文档
  • how-to-add-linux-slave-node-agent-node/ssh-slaves-plugin)
  • 本文作者: xulizhao
  • 本文链接: https://xulizhao.com/blog/jenkins/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
#ops#
关于
Git备忘
  • 文章目录
  • 站点概览

xulz

时光,漫步

56 日志
3 分类
28 标签
  • 安装
    • 直接安装系统安装包
    • 用Docker容器的方式安装
  • 常用配置
    • git添加ssh key
    • 修复错误 stderr: Host key verification failed
    • 传递参数
    • 调用docker解决权限问题
    • Android 构建
    • 修改时区
  • 流水线/Pipeline
  • 添加Slave
  • Python API调用
    • 无认证
    • 需要认证
    • curl方式
  • 调试
    • 脚本调试
    • Build step ‘Execute shell’ marked build as failure
  • 常用插件
  • 报告
    • HTML Publisher
  • 扩展阅读
    • 使用接口
© 2017 - 2023 XuLizhao 's Notes
Powered by - Hugo/ NexT
津ICP备17010344号-1
0%