一、jenkins流水线(pipeline)
1.pipeline的固定书写格式
pipeline {
agent any
stages {
stage ('下载代码') {
...
}
stage ('检测代码') {
...
}
stage ('编译代码') {
...
}
stage ('部署代码') {
...
}
}
}
2.jenkins实现pipeline流水线
以jenkins部署一个java项目为例
1.新建一个流水线任务
2.对流水线任务进行配置
脚本大概
pipeline {
agent any
#允许进行传参
parameters { string(defaultValue: '', name: 'git_version', description: '请根据发布类型进行选择发布:\n 输入-v1.1-发布-最新代码-到生产' ) }
stages {
stage ('下载代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '${git_version}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '743eb688-00af-4eca-9f76-3ba0c3b7f64d', url: 'git@gitlab.mrche.xyz:dev/java-project.git']]])
}
}
stage ('检测代码') {
steps {
sh '/usr/local/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectName=${JOB_NAME} \
-Dsonar.projectKey=${JOB_NAME} \
-Dsonar.sources=. \
-Dsonar.host.url=http://sonar.mrche.xyz:9000 \
-Dsonar.login=0e2ba15c72af04********3823c2980e338d2ad7'
#sonarqube生成的令牌Talk
}
}
stage ('编译代码') {
steps {
sh 'mvn package'
}
}
stage ('是否部署') {
steps {
#点击ok就会继续执行以下步骤
input message: '确定要部署吗?', ok: 'ok'
}
}
stage ('部署代码') {
steps {
sh 'sh -x /scripts/java-deploy-tag.sh'
}
}
}
//stages整体流水线运行完毕后才会执行post阶段
post {
success {
#钉钉进行构建结果的通知
dingTalk accessToken: 'd2c546dceffa5c8e4922194c*****6dcb24c08301a1331fca25b34c3bc76612c', imageUrl: '', jenkinsUrl: 'http://jenkins.mrche.xyz:8080', message: 'pipeline构建成功', notifyPeople: ''
}
failure {
dingTalk accessToken: 'd2c546dceffa5c8e4922194c*****6dcb24c08301a1331fca25b34c3bc76612c', imageUrl: '', jenkinsUrl: 'http://jenkins.mrche.xyz:8080', message: 'pipeline构建失败', notifyPeople: ''
}
}
}
流水线参考步骤:
1.下载代码
2.检测代码
3.通知代码检测详情
4.是否编译
是
编译代码
部署代码
否
5.钉钉通知构建结果
二、jenkins分布式构建
1.实行分布式构建的原因
1.项目过多,构建次数多,单节点压力过大
2.项目繁多,需要依赖的各种环境可能会发生冲突
2.分布式构建的实现
(1)slave从节点的准备
1.slave从节点不需要安装jenkins
2.环境要与master一致(java、maven、脚本等)
3.sonarqube要一致(sonar-scanner)
4.与web集群节点实现免密
5.与gitlab主机实现免密
6.安装自己持有的环境(ios、python等)
(2)在jenkins中创建从节点
(3)对slave从节点进行配置
(4)检测结果
1.当master节点繁忙时,构建任务会自动分配给slave从节点
2.怎样指定节点进行任务的构建?
#在流水线脚本中进行修改
pipeline {
agent { label 'slave-node1' } #添加这个来指定节点运行
...
三、jenkins权限管理
全局角色:控制登录的用户能操作jenkins的哪些资源
项目角色:控制指定用户能操作或看到哪些项目
1.安装插件
2.启动role-base认证方式
3.管理和分配角色