命令记不住

登陆

Pipeline 流水线项目

Pipeline流水线项目

1.pipeline简介

1.什么是pipeline
Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单
来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个
任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy
脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。
2.Pipeline 概念
Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构
建过程。

Node

node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式
Pipeline 语法的关键特性。

Stage

Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如“构建”,“测试”和“部署”阶段),
许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。

Step

一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的“步骤”)要做什么。例如,使用sh step:sh 'make' 可以执行 make 这个 shell 命令。
3.jenkins file
声明式 脚本式
脚本式语法格式:

pipeline{
agent any
stages{
stage("get code"){
steps{
echo "get code from scm"
}
}
stage("package"){
steps{
echo "packge code"
}
}
stage("deploy"){
steps{
echo "deploy packge to node1"
}
}
}
}

2.创建一个pipeline项目

1.登录jenkins创建pipline项目

创建项目


2.在项目设置中添加语法


语法


3.立即构建


构建


3.在gitlab的项目中添加一个新文件用来测试流水线

1.在gitlab项目中新建一个调用文件
在仓库创建一个jenkinsfile文件进行调用
Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念


4


2.粘贴语法脚本

pipeline{
agent any
stages{
stage("get code"){
steps{
echo "get code from scm"
}
}
stage("package"){
steps{
echo "packge code"
}
}
stage("deploy"){
steps{
echo "deploy packge to node1"
}
}
}
}

5


3.在jenkins的pipeline项目中修改获取来源
在jenkins端进行获取测试


6


注意脚本路径
下图是默认路径Jenkinsfile,在实际的目录中为jenkinsfile


错误的示范


[root@git02 opt]#ls /var/lib/jenkins/workspace/pipeline-job/ | grep jenkins
jenkinsfile

正确的示范


4.测试上线

更改jenkinsfile文件进行测试

pipeline{
agent any
stages{
stage("get code"){
steps{
echo "get code"
}
}
stage("unit test"){
steps{
echo "unit test"
}
}
stage("package"){
steps{
sh 'tar zcf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./git --exclude=jenkinsfile'
}
}
stage("deploy"){
steps{
sh 'ssh 10.0.0.6 "cd /etc/nginx/web && mkdir web-${BUILD_ID}"'
sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.6:/etc/nginx/web/web-${BUILD_ID}'
sh 'ssh 10.0.0.6 "cd /etc/nginx/web/web-${BUILD_ID} && tar xf web-${BUILD_ID}.tar.gz && rm -rf web-${BUILD_ID}.tar.gz"'
sh 'ssh 10.0.0.6 "cd /etc/nginx/web && rm -rf html && ln -s web-${BUILD_ID} /etc/nginx/web/html"'

    }
   }
  }
}

5.查看nginx服务器上是否推送到项目代码

如图所示,推送代码个格式为BUILD_ID


上线

提交阶段:

node {
    gitlabCommitStatus(builds:["Commit Build"]){
      stage('Code PUll'){
          echo "Code PUll"
          git credentialsId: '10ca77b0-5bcc-4aa7-9f26-b27a5d557f7a', url: 'http://192.168.56.12/devops/account.git'
      }
      stage('Code Build'){
          echo "code Build"
          sh '/root/mvn/apache-maven-3.5.2/bin/mvn clean compile'
      }
      stage('Unit Test'){
          echo "Unit test"
      }
    }
}

集成测试阶段:

node {
    stage('Code PUll'){
        echo "Code PUll"
        git credentialsId: '10ca77b0-5bcc-4aa7-9f26-b27a5d557f7a', url: 'http://192.168.56.12/devops/account.git'
    }
    stage('Code Build'){
        echo "code Build"
        sh '/root/mvn/apache-maven-3.5.2/bin/mvn clean compile'
    }
    stage('Unit Test'){
        echo "Unit test"
        sh '/root/mvn/apache-maven-3.5.2/bin/mvn test'
    }
    stage('Package'){
        echo "Package"
        sh '/root/mvn/apache-maven-3.5.2/bin/mvn package'
    }
    stage('Deploy Test ENV'){
        echo "Deploy Test ENV"
        sh 'ls -la ./account-service/target/'
    }
    stage('AUto API TEst'){
        echo "TEST"
    }
}

部署阶段

参数化构建过程
node {
    stage('Deploy'){
        echo "Code Deploy Prod"
        sh '/opt/test.sh ${ENV} ${GROUP} ${PROJECT} ${VERSION}'
    }
}

推荐阅读