Jenkins-Pipeline【流水线】、Pipeline与Webhook实践

1、流水线命令特点

pipeline的声明式语法有一个非常重要的问题,
1、steps内部的命令,每一条单独的命令都在当前任务的工作目录下执行。
即使A命令切换到了一个新的目录,接下来的B命令并不会在对应的新目录中执行,而是在当前任务的工作目录下执行。如果非要在切换后的目录下执行命令B,那么采用shell中的 && 符号将多条命令拼接一起即可。
2、在流水线任务中,中文方式编写命令不友好,推荐在外面写好命令,再拷贝到里面
3、默认情况下,不支持shell里面的表达式,因为groovy有自己的条件表达式
4、如果jenkins的工作目录下存在同名目录,则获取失败

2、示例1、Pipeline使用命令构建【工作目录位置确认】

2.1、pipeline代码

pipeline {
   agent any
   stages {
       stage('cmd-test') {
         steps {
           echo "命令测试"
           sh 'pwd'
           sh 'mkdir nihao '
           sh 'cd nihao && pwd && mkdir buhao && cd buhao && pwd'     
           sh 'pwd && ls'     
         }    
       }
   }
}

# 主要是验证工作目录的位置

2.2、构建并且查看日志

结果显示:
每一个sh命令都是在当前任务的工作目录中执行,如果需要切换工作目录,需要将多条命令合并,这是由于jenkins的job任务彼此之间是独立的运行空间,所以资源不共享。

3、示例2、Pipeline不支持管道

3.1、Pipeline代码

pipeline {
   agent any
   stages {
       stage('Hello') {
           steps {
               sh 'num=$(docker ps | grep tomcat-web | wc -l)'
               echo "$num"
               echo '----------------------------'
           }
       }
   }
}

3.2、构建且查看日志

3.2.1、报错显示

3.2.2、日志

结果显示:groovy 不支持我们常用的这种bash进阶语法,因为groovy 有自己独有的语法

4、示例3、出现同名目录就会导致任务中断

4.1、Pipeline代码

pipeline {
   agent any
   stages {
       stage('Hello') {
           steps {
               sh 'git clone git@192.168.10.10:web/tomcat_pro.git'
               echo '----------------------------'
               sh 'git clone git@192.168.10.10:web/tomcat_pro.git'
           }
       }
   }
}

4.2、构建且查看日志

4.2.1、报错显示

4.2.2、日志

结果显示:如果任务目录下,出现同名目录就会导致任务中断

5、实战:之前tomcat_pro项目修改为Pipeline【Pipeline+WebHook】

5.1、pipeline代码

pipeline {
  agent any
  stages {
    stage('Prepare') {
      steps {
        echo "开始tomcat_web任务"
      }
    }
    stage('CloneCode') {
      steps {
        echo "git获取代码"
        sh 'rm -rf tomcat_pro'
        sh 'git clone git@192.168.10.10:web/tomcat_pro.git'
        sh 'cd tomcat_pro && pwd && git config --local user.name "jenkins" && git config --local user.email "jenkins@example.com"'
      }
    }
    stage('ArchiveROOT') {
      steps {
        echo "制作ROOT.tar.gz"
        sh 'cd tomcat_pro && tar -C tomcat-web -zcf tomcat-web/ROOT.tar.gz ROOT --remove-files'
      }
    }
    stage('MakeDockerImage') {
      steps {
        echo "制作Docker镜像"
        sh 'cd tomcat_pro && docker build -t tomcat-web:v0.1 ./tomcat-web'
      }
    }
    stage('Deploy') {
      steps {
        echo "布署Docker镜像"
        sh 'docker stop tomcat-web'
        sh 'docker rm -f tomcat-web'
        sh 'docker run -d --name tomcat-web -p 8081:8080 tomcat-web:v0.1'
      }
    }
  }
}

5.2、构建且查看状态

5.3、查看日志

5.4、配置WebHook

5.4.1、jenkins上配置

5.4.2、Gitlab上配置

5.4.3、测试

 

posted @ 2023-06-16 23:15  小粉优化大师  阅读(257)  评论(0编辑  收藏  举报