DevOps 生态介绍(六):超详细!Jenkins Pipeline 实战教程,构建你的第一个 CI 项目
·
文章简介
在“DevOps 生态介绍(三):零基础入门 Jenkins:部署成功后编译你的第一个项目”这篇文章中主要介绍了在Jenkins UI界面手动配置完成项目的前后端构建。今天这边文章主要介绍通过Jenkins pipeline来完成前后端项目的构建。
备注:今天这边文章直接上干货,不具体介绍pipeline的语法,直接根据我在用的Jenkinsfile文件进行实战介绍,这两个Jenkinsfile文件我个人觉得可以拿过来根据自己的实际情况修改下就能直接使用
Jenkins pipeline构建前端项目
#前端项目Jenkinsfile文件内容
pipeline {
agent any
tools {
nodejs 'NodeJS'
}
parameters {
gitParameter(
name: 'BRANCH',
type: 'PT_BRANCH',
defaultValue: 'master',
branchFilter: 'origin/(.*)',
sortMode: 'DESCENDING_SMART',
selectedValue: 'DEFAULT',
description: '请选择要构建的分支'
)
choice(
name: 'RUN_COVERAGE',
choices: ['YES','NO'],
description: '请选择YES/NO'
)
}
stages {
stage('checkout_get_code') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: "*/${params.BRANCH}"]],
userRemoteConfigs: [[
credentialsId: 'f245a11f-afe0-4ca4-aa2d-1e574724677d',
url: 'https://codeup.xxxx.com/60b83b8301d20d58b8017/test-front.git'
]]
])
}
}
stage('Build_front') {
steps {
nodejs('NodeJS') {
// some block
}
sh """
cd $WORKSPACE/
npm config set registry https://registry.npmmirror.com
#npm install -g pnpm@9
pnpm install
#pnpm -r --filter=main-ocbc run coverage build
if [ "${params.RUN_COVERAGE}" = "YES" ]; then
echo "Running coverage tests..."
pnpm run coverage
fi
pnpm run build-ocbc
"""
}
}
stage('tar_package') {
steps {
sh """
echo "tar package 开始..."
cd $WORKSPACE/packages/main-ocbo/dist
tar -zcvf test-front.tar.gz *
"""
}
}
stage('CD') {
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: '192.168.1.170',
transfers: [
sshTransfer(
cleanRemote: false,
excludes: '',
execCommand: '''
#!/bin/bash
DATE=`date '+%Y-%m-%d-%H:%M:%S'`
cd /tmp
mkdir test-front
chmod 755 test-front
mv test-front.tar.gz test-front/
cd /tmp/test-front/
tar -zxvf test-front.tar.gz && rm -f test-front.tar.gz
chmod 755 * -R
mv /data/app/test-front /home/backup/test-front.$DATE.bak
mv /tmp/test-front /data/app/
''',
execTimeout: 120000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: '/tmp/',
remoteDirectorySDF: false,
removePrefix: 'packages/main-ocbo/dist/',
sourceFiles: 'packages/main-ocbo/dist/test-front.tar.gz'
)
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: false
)
]
)
}
}
}
}
Jenkins pipeline构建后端java项目
#java 后端项目Jenkinsfile内容
pipeline {
agent any
tools {
maven 'Maven'
}
parameters {
gitParameter(
name: 'BRANCH',
type: 'PT_BRANCH',
defaultValue: 'master',
branchFilter: 'origin/(.*)',
sortMode: 'DESCENDING_SMART',
selectedValue: 'DEFAULT',
description: '请选择要构建的分支'
)
booleanParam(
name: 'SKIP_TEST',
defaultValue: true,
description: '是否跳过单元测试'
)
choice(
name: 'JDK_VERSION',
choices: ['JDK17','JDK21'],
description: '请选择JDK版本'
)
}
environment {
JAVA_HOME = tool "${params.JDK_VERSION}"
PATH = "${env.JAVA_HOME}/bin:${env.PATH}"
}
stages {
stage('checkout_get_code') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: "*/${params.BRANCH}"]],
userRemoteConfigs: [[
credentialsId: 'f245a11f-afe0-4ca4-aa2d-1e574724677d',
url: 'https://codeup.xxxx.com/60b83b301d20d58b8017/test.git'
]]
])
}
}
stage('Build_jar') {
steps {
sh """
echo "build jar"
java -version
echo $JAVA_HOME
mvn clean package \
-DskipTests=${params.SKIP_TEST}
"""
}
}
stage('tar_package') {
steps {
sh """
echo "tar package 开始..."
cd target
tar -zcvf test.tar.gz \
ms-util-1.2.0-SNAPSHOT.jar
"""
}
}
stage('CD') {
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: '192.168.1.170',
transfers: [
sshTransfer(
cleanRemote: false,
excludes: '',
execCommand: '''
#!/bin/bash
source /etc/profile
cd /data/app/mq_util
./server.sh stop
tar zxvf test.tar.gz
sleep 2
rm -rf test.tar.gz
BUILD_ID=dontKillMe
./server.sh start
sleep 2
''',
execTimeout: 120000,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: '/data/app/mq_util',
remoteDirectorySDF: false,
removePrefix: 'target/',
sourceFiles: 'target/test.tar.gz'
)
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: false
)
]
)
}
}
stage('jacoco') {
steps {
jacoco()
}
}
}
}
Jenkinsfile 注意事项
1:Jenkinsfile 文件名必须严格是“Jenkinsfile ”,没有后缀之类的格式
2:Jenkinsfile 文件存放目录必须是在项目的根目录下,与根pom.xml文件在同一目录下
3:每个项目都有很多分支,不需要每个分支下都有Jenkinsfile文件,可以单独创一个pipeline的分支就放一个Jenkinsfile文件,构建时在选择业务分支进行构建即可。
下一批文章将介绍
“DevOps 生态介绍(七):Jenkins Pipeline 核心语法大全,这一篇就够了!”
更多推荐



所有评论(0)