一.简介
jenkins流水线pipeline是通过编写脚本来定义软件开发过程中的整个流程,包括构建、测试、部署等环节的顺序和依赖关系,实现了对整个流程的可编排性和可控性。
#pipeline格式,3大核心
agent:指定在运行pipeline的服务器,类似ansible的hosts
stages:包含流水线的各个阶段,类似ansible的tasks
steps:指定流水线的一个任务,如构建、测试、部署,包括具体的指令,类似ansible中调用的各种模块
脚本示例展示了如何将代码从构建过程自动推送到远程服务器的基本方法
#这个 Jenkinsfile 使用了 Jenkins Pipeline 的 Groovy 脚本定义,包含了三个阶段:Build、Test 和 Deploy。
#在 Build 和 Test 阶段使用了 Maven 来构建和测试 Java 应用程序,
#在 Deploy 阶段使用了 sshPublisher 步骤通过 SSH 将构建好的应用部署到远程服务器。
pipeline {
agent any
stages {
stage('Build') {
steps {
// maven构建
sh 'mvn clean package'
}
}
stage('Test') {
steps {
// 测试
sh 'mvn test'
}
}
stage('Deploy') {
steps {
// 部署
sshPublisher(publishers: [sshPublisher(configName: 'production_server', transfers: [sshTransferRemote(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '\\n', remoteDirectory: '/apps/myapp', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/*.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false)])
}
}
}
}
二.测试示例
0.插件安装
"This Pipeline has run successfully, but does not define any stages. Please use the stage step to define some stages in this Pipeline."
#插件加速
cd /var/lib/jenkins/updates/
sed -i 's#http:\\/\\/updates.jenkins-ci.org\\/download#https:\\/\\/mirrors.tuna.tsinghua.edu.cn\\/jenkins#g' default.json
sed -i 's#http:\\/\\/www.google.com#https:\\/\\/www.baidu.com#g' default.json
#web插件管理界面搜索并安装插件
pipeline
#下载pipeline-maven插件
cd /var/lib/jenkins/plugins
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/pipeline-maven/latest/pipeline-maven.hpi
#重启jenkins
systemctl restart jenkins
1.新建任务 选流水线
2.pipeline编写的脚本
pipeline {
agent any
environment {
host="alibaby007"
}
stages {
stage('1.Build') {
steps {
echo "1 $host"
}
}
stage('2.Test') {
steps {
echo "2 $host"
}
}
stage('3.Deploy') {
steps {
echo "3 $host"
}
}
}
}
Approve script 批准脚本
立即构建
三.拉取代码 maven编译 分发部署 示例
上一个任务---配置---流水线语法
流水线语法拉取代码示例
git credentialsId: '88679384-77d6-412c-95f2-295f9ed4eefb', url: 'git@192.168.77.147:root/hello-word-war.git'
流水线语法执行shell命令示例
sh 'shell命令'
流水线语法执行shell脚本示例
sh '''shell脚本'''
合成后的流水线
pipeline {
agent any
environment {
host="alibaby007"
}
stages {
stage('1.pull代码') {
steps {
git credentialsId: '88679384-77d6-412c-95f2-295f9ed4eefb', url: 'git@192.168.77.147:root/hello-word-war.git'
}
}
stage('2.maven构建') {
steps {
sh ''' /app/tools/maven/bin/mvn clean package '''
}
}
stage('3.Deploy') {
steps {
sh '''
echo "当前部署的版本为${TAG_NAME}"
#配置变量
file="hello-world-war-1.0.0.war"
tmp_file="`date +%s`_hello-world-war-1.0.0.war"
#web_server_list 可以参数化构建,可以设置多个IP
web_server_list="192.168.77.142"
#路径 当前路径默认$workspace下
src_dir=./target
dst_dir=/app/tools/tomcat/webapps
bak_dir=/tmp/`date +%s`_ROOT
#maven已打包,源码无需打包
#分发
distribute() {
for ip in ${web_server_list}
do
scp ${src_dir}/${file} root@${ip}:/tmp/${tmp_file}
done
}
#部署
deploy() {
for ip in ${web_server_list}
do
ssh root@${ip} " cd ${dst_dir} ;
[ -d ${dst_dir}/ROOT ] && {
mkdir -p ${bak_dir} ;
mv ${dst_dir}/ROOT ${dst_dir}/ROOT.war ${bak_dir} ;
} ;
mv /tmp/${tmp_file} ${dst_dir}/ROOT.war ;
systemctl stop tomcat ;
systemctl stop tomcat ;
systemctl start tomcat
"
done
}
#执行函数
distribute
deploy
'''
}
}
}
}
立即构建
控制台输出