3.2 访问 API
远程访问API
Jenkins为功能提供了机器消耗的远程访问API。目前,它具有三种风格:
- XML
- JSON with JSONP support
- Python
4.5 共享库之钉钉消息推送
起因:执行完流水线后进行一定程度的消息推送,所以选择钉钉进行jenkins
构建结构的消息推送
下载配置相关依赖插件
相关环境:
Jenkins
2.277.3,安装文档见上篇DingTalk
插件 2.4.3build user vars plugin
插件 1.7
-
在Jenkins中安装钉钉插件DingTalk
⚠️ 请确保你的 Jenkins 版本 >= 2.176.4
-
钉钉机器人配置,说明文档
找到 Jenkins 首页 >> 系统管理 >> 钉钉,我的配置如下图
⚠️ 注意手动输入机器人的id,不要自动生成,否则重启后,robot的id将发生变化
-
安装build user vars plugin插件,插件可能有相关版本依赖,需要重启一下 Jenkins 才能继续安装
在流水线中,使用wrap,获取BUILD_USER变量
wrap([$class: 'BuildUser']) { }
2.4 使用docker安装jenkins
安装配置docker
-
更换yum源,如果本来就是国内源,无需更换
curl -fsSL "https://gitee.com/clay-wangzhi/shell/raw/master/repo_replace.sh" | bash
-
安装配置Docker
使用官方脚本安装 Docker
curl -fsSL "https://get.docker.com/" | bash -s -- --mirror Aliyun
加载br_netfilter
modprobe br_netfilter
设置下系统内核参数
cat<<EOF > /etc/sysctl.d/docker.conf # 要求iptables不对bridge的数据进行处理 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-arptables = 1 # 开启转发 net.ipv4.ip_forward = 1 EOF sysctl -p /etc/sysctl.d/docker.conf
⚠️ 慎用
sysctl --system
命令,如果参数在不同文件中设置,会有优先级问题,目前看来/etc/sysctl.conf
的优先级最高配置docker镜像加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
启动docker服务并加入开机自启
systemctl enable docker && systemctl start docker
4.3 Groovy 简明教程
最近一直有很多同学提到不会写 Jenkins Pipeline 脚本,我都是直接摔一个 Jenkins 官方文档给他们,但是当我自己仔细去查看资料的时候发现并非如此简单,无论是声明式还是脚本式的 Pipeline 都依赖了 Groovy 脚本,所以如果要很好的掌握 Pipeline 脚本的用法,我们非常有必要去了解下 Groovy 语言。
4.6 流水线开发工具
转载自:流水线开发工具 | 泽阳
您好,本模块主要了解在流水线中常用的方法😀
片段生成器
使用片段生成器可以根据个人需要生成方法,有些方法来源于插件,则需要先安装相关的插件才能使用哦。
4.7 pipeline 生产配置实例
pipeline配置java项目
pipeline {
agent { label 'slave' }
options {
timestamps()
disableConcurrentBuilds()
buildDiscarder(
logRotator(
numToKeepStr: '20',
daysToKeepStr: '30',
)
)
}
parameters {
choice(
name: "DEPLOY_FLAG",
choices: ['deploy', 'rollback'],
description: "发布/回滚"
)
}
/*=======================================常修改变量-start=======================================*/
environment {
gitUrl = "git地址"
branchName = "分支名称"
gitlabCredentialsId = "认证凭证"
projectRunDir = "项目运行目录"
jobName = "${env.JOB_NAME}"
serviceName = "服务名称"
serviceType = "jar"
runHosts = "192.168.167.xx,192.168.167.xx"
rollbackVersion = ""
}
stages {
stage('Deploy'){
when {
expression { return params.DEPLOY_FLAG == 'deploy' }
}
stages {
stage('Pre Env') {
steps {
echo "======================================项目名称 = ${env.JOB_NAME}"
echo "======================================项目 URL = ${gitUrl}"
echo "======================================项目分支 = ${branchName}"
echo "======================================当前编译版本号 = ${env.BUILD_NUMBER}"
}
}
stage('Git Clone') {
steps {
git branch: "${branchName}",
credentialsId: "${gitlabCredentialsId}",
url: "${gitUrl}"
}
}
stage('Mvn Build') {
steps {
withMaven(jdk: 'jdk1.8', maven: 'maven') {
sh "mvn clean package -Dmaven.test.skip=true -U -f ${serviceName}/pom.xml"
}
}
}
stage('Ansible Deploy') {
steps{
script {
sleep 5
ansiColor('xterm') {
ansiblePlaybook colorized: true, extras: '-e "directory=${projectRunDir}" -e "job=${jobName}" -e "service=${serviceName}" -e "type=${serviceType}"', installation: 'ansible', inventory: '/etc/ansible/hosts.yml', limit: "${runHosts}", playbook: '/etc/ansible/playbook/deploy-jenkins.yml'
}
}
}
}
}
}
stage('Rollback') {
when {
expression { return params.DEPLOY_FLAG == 'rollback' }
}
steps{
script {
rollbackVersion = input(
message: "请填写要回滚的版本",
parameters: [
string(name:'last_number')
]
)
sh """
echo "正在回滚至就近第${rollbackVersion}个版本"
ansible ${runHosts} -m shell -a "sh ${projectRunDir}/rollback.sh ${rollbackVersion} ${serviceName}"
"""
}
}
}
}
post {
always {
deleteDir()
}
success {
echo 'This task is successful!'
}
}
}
4.2 Jenkins流水线语法
您好,本模块主要学习声明式流水线的核心语法,掌握核心语法便于编写Jenkinsfile 😀
声明式流水线
声明式Pipleine是官方推荐的语法,声明式语法更加简洁。所有的声明式Pipeline都必须包含一个 pipeline块中,比如:
pipeline {
//run
}
4.1 开始编写Jenkinsfile
您好,还在疑惑什么是流水线吗? 本章我们将告诉您如何运行一条流水线 赶快学习吧! 😀
为什么使用pipeline?
本质上,jenkins是一个自动化引擎,它支持许多自动模式。流水线向Jenkins添加了一组强大的工具,支持用例、简单的持续集成到全面的持续交付流水线。 通过对一系列的发布任务建立标准的模板,用户可以利用更多流水线的特性,比如: