zoukankan      html  css  js  c++  java
  • Jenkins Pipeline流水线项目构建

    1. Pipeline简介

    1. 概念

    Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点
    的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。

    2. 使用Pipeline有以下好处(来自翻译自官方文档):

    • 代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。
    • 持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。
    • 可停止:Pipeline可接收交互式输入,以确定是否继续执行Pipeline
    • 多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能。
    • 可扩展:Pipeline插件支持其DSL的自定义扩展 ,以及与其他插件集成的多个选项。

    3. 如何创建 Jenkins Pipeline呢?

    • Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
    • Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
    • Pipeline 也有两种创建方法:可以直接在 Jenkins Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfile Pipeline 这种方法)。

    2. 安装Pipeline插件

    Manage Jenkins->Manage Plugins->可选插件

    如果安装插件失败可以点高级,里面选择上传插件,手动上传插件包,插件包的下载地址

    http://updates.jenkins-ci.org/download/plugins/
    

    安装插件后,创建项目的时候多了 “流水线”类型

    3. Pipeline语法快速入门

    1. Declarative声明式-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('pull code') {
             steps {
                echo 'pull code'
             }
          }
          stage('build code') {
             steps {
                echo 'build code'
             }
          }
          stage('deploy project') {
             steps {
                echo 'deploy project'
             }
          }
       }
    }
    

    点击应用,保存,点击Build Now,可以看到整个构建过程

    2. Scripted Pipeline脚本式-Pipeline

    创建项目

    点击确定

    这次选择 "Scripted Pipeline"

    node {
       def mvnHome
       stage('Preparation') { // for display purposes
          // Get some code from a GitHub repository
          git 'https://github.com/jglick/simple-maven-project-with-tests.git'
          // Get the Maven tool.
          // ** NOTE: This 'M3' Maven tool must be configured
          // **       in the global configuration.           
          mvnHome = tool 'M3'
       }
       stage('Build') {
          // Run the maven build
          withEnv(["MVN_HOME=$mvnHome"]) {
             if (isUnix()) {
                sh '"$MVN_HOME/bin/mvn" -Dmaven.test.failure.ignore clean package'
             } else {
                bat(/"%MVN_HOME%inmvn" -Dmaven.test.failure.ignore clean package/)
             }
          }
       }
       stage('Results') {
          junit '**/target/surefire-reports/TEST-*.xml'
          archiveArtifacts 'target/*.jar'
       }
    }
    
    
    • Node :节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境,后续讲到JenkinsMaster-Slave架构的时候用到。
    • Stage :阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,比如:BuildTestDeployStage 是一个逻辑分组的概念。
    • Step :步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,由各类 Jenkins 插件提供,比如命令:sh ‘make’,就相当于我们平时 shell 终端中执行 make 命令一样。

    编写一个简单的脚本式Pipeline

    node {
       def mvnHome
       stage('pull code') { 
            echo '拉取代码' 
       }
       stage('build code') { 
            echo '编译构建代码' 
       }
       stage('deploy code') {
            echo '部署代码' 
       }
    }
    

    应用,保存,执行Build Now

    4. 从github拉取代码,并编译部署

    新建Item

    点击确定

    在流水线中选择Hello World,点击流水线语法

    这里有工具可以生成需要的代码脚本

    1. 生成gitlab拉取代码脚本

    填入gitlabssh地址凭证填入gitlab配置的凭证,选择对应分支,点击生成流水线脚本

    jenkins凭证插件的安装和基本使用

    将生成的代码复制出来备用

    git credentialsId: 'cce455e2-ba69-459e-93bc-c58ce1e6278f', url: 'ssh://git@192.168.2.4:23456/itheima_group/web_demo.git'
    

    2. 生成编译构建脚本

    sh label: '', script: 'mvn clean package'
    

    3. 生成部署项目脚本

    jenkins的凭证中添加Tomcat用户凭证

    tomcat部署服务器上配置tomcat的用户角色

    tomcat配置用户角色权限

    deploy adapters: [tomcat9(credentialsId: 'da6aa960-cb2b-415f-a31e-e161ba704f28', path: '', url: 'http://192.168.2.5:8080')], contextPath: null, war: 'target/*.war'
    

    4. 整合流水线脚本

    pipeline {
       agent any
    
       stages {
          stage('pull code') {
             steps {
                git credentialsId: 'cce455e2-ba69-459e-93bc-c58ce1e6278f', url: 'ssh://git@192.168.2.4:23456/itheima_group/web_demo.git'
             }
          }
          stage('build code') {
             steps {
                sh label: '', script: 'mvn clean package'
             }
          }
          stage('deploy code') {
             steps {
                deploy adapters: [tomcat9(credentialsId: 'da6aa960-cb2b-415f-a31e-e161ba704f28', path: '', url: 'http://192.168.2.5:8080')], contextPath: null, war: 'target/*.war'
             }
          }
       }
    }
    

    应用,保存

    5. 执行

    点击Build Now


    部署成功

    5. 将Jenkins脚本放入项目中

    刚才我们都是直接在JenkinsUI界面编写Pipeline代码,这样不方便脚本维护,建议把Pipeline脚本放
    在项目中(一起进行版本控制)

    1. 在项目根目录建立Jenkinsfile文件,把内容复制到该文件中

    Jenkinsfile上传到Gitlab

    git add .
    git commit -m "add Jenkinsfile"
    git push
    

    2. 在项目中引用该文件

    3. 测试

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood (贪心)
    HDU 2544 最短路 (Floyd)
    CodeForces 632C Grandma Laura and Apples (模拟)
    CodeForces 731F Video Cards (数论+暴力)
    CodeForces 731C Socks (DFS或并查集)
    CodeForces 731B Coupons and Discounts (水题模拟)
    CodeForces 731A Night at the Museum (水题)
    UVaLive 6834 Shopping (贪心)
    zzuli 1484 继续双线
    zzuli 1875多线DP
  • 原文地址:https://www.cnblogs.com/ifme/p/12867725.html
Copyright © 2011-2022 走看看