Jenkins(集群与流水线配置)
Jenkins集群
集群化构建可以提升构建效率,也可以并发在多台机器上执行构建。
安装前提:内存至少512MB、Java 17 以上、Maven环境、Git环境
配置集群步骤
配置节点菜单
新建节点
查看节点配置状态
新建完节点,点击所配置的节点,查看配置状态
配置完,在该节点的root目录,可以看到
# 可以在/root目录下,看到该文件
remoting
remoting.jar
配置并发构建
默认情况,不会并发构建,只会主节点进行构建任务。
需要在该任务构建配置,勾选并发构建配置。
勾选后,进行并发构建
配置节点的并发构建的个数
在[构建执行状态],点击每个节点名称,进行配置构建个数
配置任务只能在某节点进行构建
在该任务进行配置,
# 基本语法有:
节点标签名1 || 节点标签名1 # 只能在节点1或节点2上执行
节点标签名1 && 节点标签名1
Pipline流水线
流水线既能作为任务的本身,也能作为Jenkinsfile。
使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发Jenkinswebui不能完成的更复杂的构建逻辑,作为开发者可读性也更好。
自动化构建
主要脚本
pipeline:整条流水线
agent:指定执行器
stages:所有阶段
stage:某一阶段,可有多个
steps:阶段内的每一步,可执行命令
流水线配置
基础框架 -基本脚本:
pipeline {agent any # agent单独配置,# agent {# node {# label "master" # 配置节点名称,在上面的配置集群时,指定的新建节点。例:jenkins-02# } # }stages {stage('拉取代码') {steps {echo '拉取代码完成'}}stage('执行构建') {steps {echo '执行构建完成'}}}post {always {echo "完成"}failure {echo "失败"}}
}
注意:每次更改脚本,需要手动,点击Approve(批准)即可。
否则执行任务,会出现该异常
org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use...
点击Approve(批准)即可。
安装可视化界面
blue ocean可视化流水线界面
访问,查看新的UI界面
声明式流水线
在该任务的流水线,点击流水线语法,
Git配置
# 生成的脚步
git credentialsId: 'gitee', url: 'https://gitee.com/yan418/jenkins.git'
配置Maven
# 可通过命令配置
# 找到所下载的代码目录,对应的pom.xml文件位置,进行maven打包
# 单行写命令,sh "mvn --version"
# 多行写命令,在 sh """ xxx """ 结尾
stage("执行构建") {steps {sh """ cd demomvn clean package"""echo '构建完成'}
}
Pre Steps(前期步骤)
# 生成的脚步
sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'sh cmm.sh demo', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
Post Steps(后续步骤)
页面配置,与之前页面操作配置一样,点击下方,生成脚本。
# 生成的脚步
sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup /usr/local/java/jdk1.8.0_202/bin/java -jar /root/cmm/demo*.jar >/root/log/demo.log 2>&1 & sleep 1', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/cmm', remoteDirectorySDF: false, removePrefix: 'demo/target', sourceFiles: '**/demo/target/demo*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
对应完整的脚步
根据上面生产的脚步,进行完整拼接,配置该任务的脚步
pipeline {agent any tools {maven "maven-3.6.1" # maven-3.6.1,是在Tools里配置的Maven名称}stages {stage('拉取代码') {steps {# 从git仓库,拉取代码git credentialsId: 'gitee', url: 'https://gitee.com/yan418/jenkins.git'echo '拉取代码完成'}}stage('执行打包项目') {steps {# 找到所下载的代码目录,对应的pom.xml文件位置,进行maven打包# 单行写命令,sh "mvn --version"# 多行写命令,在 sh """ xxx """ 结尾sh """ cd demomvn clean package"""echo '构建完成'}}stage('执行Pre Steps') {steps {# Pre Steps(前期步骤)sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'sh cmm.sh demo', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '执行构建完成'}}stage('发送jar包到测试服务器') {steps {# Post Steps(后续步骤)sshPublisher(publishers: [sshPublisherDesc(configName: 'testserver', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup /usr/local/java/jdk1.8.0_202/bin/java -jar /root/cmm/demo*.jar >/root/log/demo.log 2>&1 & sleep 1', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/cmm', remoteDirectorySDF: false, removePrefix: 'demo/target', sourceFiles: '**/demo/target/demo*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '执行构建完成'}}}post {always {echo "完成"}failure {echo "失败"}}
}
配置完,进行构建任务,查看流水线情况,也可以单独执行某个环节的任务重启
配置多分支Job任务
一套代码,分为test分支和master分支,通过一个Jenkins,分别发送部署到测试服务和生产服务器。
再点击-创建流水线,如果在操作过程失败,点击设置按钮,进行手动配置
配置分支源
手动配置多分支源
配置Jenkinsfile
将不同的Jenkinsfile文件,提交不同的分支上。
查看页面配置
分别单独对不同的分支的代码,进行构建。也可以在多分支JOB运行,一次构建不同分支的任务构建。