Jenkins(集群与流水线配置)
Jenkins集群
集群化构建可以提升构建效率,也可以并发在多台机器上执行构建。
安装前提:内存至少512MB、Java 17 以上、Maven环境、Git环境
配置集群步骤
配置节点菜单

新建节点




查看节点配置状态
新建完节点,点击所配置的节点,查看配置状态


配置完,在该节点的root目录,可以看到
shell
# 可以在/root目录下,看到该文件
remoting
remoting.jar
配置并发构建
默认情况,不会并发构建,只会主节点进行构建任务。
需要在该任务构建配置,勾选并发构建配置。

勾选后,进行并发构建

配置节点的并发构建的个数
在[构建执行状态],点击每个节点名称,进行配置构建个数


配置任务只能在某节点进行构建
在该任务进行配置,
shell
# 基本语法有:
节点标签名1 || 节点标签名1 # 只能在节点1或节点2上执行
节点标签名1 && 节点标签名1

Pipline流水线
流水线既能作为任务的本身,也能作为Jenkinsfile。
使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发Jenkinswebui不能完成的更复杂的构建逻辑,作为开发者可读性也更好。
自动化构建

主要脚本
pipeline:整条流水线
agent:指定执行器
stages:所有阶段
stage:某一阶段,可有多个
steps:阶段内的每一步,可执行命令
流水线配置

基础框架 -基本脚本:
dockerfile
pipeline {
agent any
# agent单独配置,
# agent {
# node {
# label "master" # 配置节点名称,在上面的配置集群时,指定的新建节点。例:jenkins-02
# }
# }
stages {
stage('拉取代码') {
steps {
echo '拉取代码完成'
}
}
stage('执行构建') {
steps {
echo '执行构建完成'
}
}
}
post {
always {
echo "完成"
}
failure {
echo "失败"
}
}
}
注意:每次更改脚本,需要手动,点击Approve(批准)即可。
否则执行任务,会出现该异常
java
org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use
...

点击Approve(批准)即可。
安装可视化界面
blue ocean可视化流水线界面
访问,查看新的UI界面
声明式流水线
在该任务的流水线,点击流水线语法,

Git配置

dockerfile
# 生成的脚步
git credentialsId: 'gitee', url: 'https://gitee.com/yan418/jenkins.git'
配置Maven
dockerfile
# 可通过命令配置
# 找到所下载的代码目录,对应的pom.xml文件位置,进行maven打包
# 单行写命令,sh "mvn --version"
# 多行写命令,在 sh """ xxx """ 结尾
stage("执行构建") {
steps {
sh """
cd demo
mvn clean package
"""
echo '构建完成'
}
}
Pre Steps(前期步骤)

dockerfile
# 生成的脚步
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(后续步骤)

页面配置,与之前页面操作配置一样,点击下方,生成脚本。
dockerfile
# 生成的脚步
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)])
对应完整的脚步
根据上面生产的脚步,进行完整拼接,配置该任务的脚步
dockerfile
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 demo
mvn 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运行,一次构建不同分支的任务构建。
