Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一
个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)
中直接载入 Jenkinsfile Pipeline 这种方法)。
在“插件管理”中的选择“可选插件”输入“Pipeline”,点击安装。
安装插件后,创建项目多了“流水线”类型
创建项目
流水线->选择HelloWorld模板
生成内容如下:
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
}
}
**stages:**代表整个流水线的所有执行阶段,通常stages只有1个,里面包含多个stage。
**stage:**代表流水线中的某个阶段,可能出现n个,一般分为拉取代码,编译构建,部署等阶段。
**steps:**代表一个阶段内需要执行的逻辑,steps里面是shell脚本,git拉取代码,ssh远程发布等人以内容。
编写一个简单声明式Pipeline:
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
echo '拉取代码'
}
}
stage('编译构建') {
steps {
echo '编译构建'
}
}
stage('项目部署') {
steps {
echo '项目部署'
}
}
}
}
点击“保存”,“应用”,点击构建,可以看到整个构建过程
创建项目
选择“Scripted Pipeline ”
node {
def mvnHome
stage('Preparation') { // for display purposes
}
stage('Build') {
}
stage('Results') {
}
}
**Node:**节点,一个Node就是一个jenkins节点,Master或者Agent,是执行step的具体运行环境,后续讲到jenkins的Master-Slave架构的时候用到。
**stage:**阶段,一个Pipeline可以换份为若干个stage,每个stage代表一组操作,比如:Build,Test,Deploy,Stage是一个逻辑分组的概念。
**Step:**步骤,Step是最基本的操作单元,可以是打印一句话,也可以是构建一个Docker镜像,由各类jenkins插件提供,比如命令:sh ’make‘,就相当于我们平时shell终端中执行make命令一样。
编写一个简单的脚本式Pipeline
node {
def mvnHome
stage('拉取代码') { // for display purposes
echo '拉取代码'
}
stage('编译构建') {
echo '编译构建'
}
stage('项目部署') {
echo '项目部署'
}
}
点击保存应用,点击立即构建。
使用Declarative声明式-Pipeline演示
点击流水线语法
点击片段生成器
输入仓库URL,和凭证,选择指定分支后,点击生成流水线语法
将生成的流水线脚本放到拉取代码中
选择片段生成器,选择sh:shell Script脚本,输入“mvn clean package”构建命令,点击生成流水线脚本。
将生成的编译脚本放到编译构建步骤中
再根据此步骤,生成一个运行jar包的脚本
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
echo '拉取代码'
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '9cc8889a-154c-4f46-8547-456070c985ad', url: 'http://101.35.161.133:8010/dev-group/web_demo.git']]])
}
}
stage('编译构建') {
steps {
echo '编译构建'
sh 'mvn clean package'
}
}
stage('项目部署') {
steps {
echo '项目部署'
sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java -jar ./target/*.jar --server.port=8080 -> d.log 2>&1 &'
echo '部署成功'
}
}
}
}
**注意:**有时需要将某个命令放到后台执行,然后并行或者异步执行其他命令,但在jenkins上很容易遇到无法真正将命令放到后台运行的问题,原因是Pipeline在推出node的时候,会默认清理自己发出的每个shell命令,即使使用了nohub,可以在命令执行的时候加上“JENKINS_NODE_COOKIE=dontKillMe”将不会清除命令。
点击“保存应用”,点击立即构建。
去服务器查看进程是否存在。
可以看到进程存在。