jenkins2 pipeline 持续集成

什么是Pipeline

jenkins2相比jenkins引入了管道(Pipeline)、工作流的概念,管道是一个单独的概念,可以执行的一系列事件或作业。Jenkins 2.x的精髓是Pipeline as Code,那为什么要用Pipeline呢?jenkins1.0也能实现自动化构建,但Pipeline能够将以前project中的配置信息以steps的方式放在一个脚本里,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程,形成流水式发布,构建步骤视图化。简单来说,Pipeline适用的场景更广泛,能胜任更复杂的发布流程。举个例子,job构建工作在master节点,自动化测试脚本在slave节点,这时候jenkins1.0就无法同时运行两个节点,而Pipeline可以

在这里,您应该看到两个熟悉的概念: Stage 和 Step 。

  • 阶段:包含一系列步骤的块。 阶段块可以命名为任何名称; 它用于可视化管道过程。
  • 步骤:说明要做什么的任务。 步骤在阶段块内定义。

通过编写papiline文件,定制化编写需要的工作流。

 

1. 构建项目

在构建jenkins项目之前,我先自定义了一个微服务eureka 注册中心,并经其上传我的gitlab仓库,以便我用来测试。如需参考:https://blog.csdn.net/forezp/article/details/81040925

搭建jenkins2参考:https://blog.csdn.net/m0_37606574/article/details/109775283,我用是的war包启动的方式。

jenkins2 pipeline 持续集成_第1张图片

jenkins2 pipeline 持续集成_第2张图片

jenkins2 pipeline 持续集成_第3张图片

 

2. 编写pipeline文件

如下是我做的一个很简单的springcloud项目,依赖了eureka,启动后是一个eureka注册中心。然后在 eureka/docker 目录下定义了 pipeline.ci,在 jenkins 配置的脚本路径就指向这个文件。

如果是微服务项目。那每个服务下面都要定义一个该服务部署的流水化脚本。

现在我把项目上传到gitlab仓库就可以测试了,如下为我定义的4个发布阶段,简单输出了1,2,3,4。完成一下基本的流程测试。

jenkins2 pipeline 持续集成_第4张图片

3. 发布项目,success!

如下为发布后的控制台输出

jenkins2 pipeline 持续集成_第5张图片

4. 定义我的实际发布流程

首先看下目录结构,jenkins配置的项目是springcloud-jenkins,该项目下有个名为eureka的微服务。docker/ 目录下分别定义了jenkins启动脚本pipeline.ci,构建镜像脚本Dockerfile。

jenkins2 pipeline 持续集成_第6张图片

以下示例:eureka/docker/pipeline.ci

请注意:

  1. 以下steps里每一行执行的shell脚本,都是从jenkins配置的git项目的根目录开始的。
  2. 代码编译完成后,会将target目录下的jar,拷贝到和Dockerfile同级目录下。方便后续制作镜像
  3. 删除私服镜像、上传新镜像的步骤,都是操作Harbor私服。我这里只是想把Harbor引入进来,也可以去掉。感觉意义不大
  4. 还可以把docker-compose引入进来,在docker目录下继续构建docker-compose.yml,通过docker-compose build Dockerfile。运行容器时直接docker-compose up -d
pipeline {

    // 用任何一个执行器均可
    agent any

    // 定义环境变量
    environment {
        workPath = './eureka'
        host = '123.57.128.96'
        version = '1.0'
        appName = 'eureka'
        port = '8761'
    }

    stages {
        stage ('代码编译'){
            steps {
                sh 'cd ${workPath} && mvn clean package -U'
                sh 'cd ${workPath} && cp ./target/*.jar ./docker/${appName}.jar'
                echo 'show docker files: '
                sh 'ls ${workPath}/docker'
            }
        }
        # 根据容器运行名称删除
        stage ('删除本地容器'){
            steps {
                sh 'docker stop ${appName}'
                sh 'docker rm ${appName}'
            }
        }
        stage ('删除本地镜像'){
            steps {
                // 强行删除镜像
                sh 'docker rmi -f ${host}/dev/cloud/${appName}:${version}'
            }
        }
        stage ('制作镜像'){
            steps {
                sh 'cd ${workPath}/docker/ && docker build -t ${host}/dev/cloud/${appName}:${version} .'
            }
        }
        // 私服定义的项目目录为:/dev/cloud/eureka
        stage ('删除私服镜像'){
            steps {
                sh "curl -u 'admin:Harbor12345' -X DELETE -H 'Content-Type:application/json' 'http://${host}/api/repositories/dev/cloud/${appName}/tags/${version}'"
            }
        }
        stage ('上传新镜像'){
            steps {
                sh 'docker push ${host}/dev/cloud/${appName}:${version}'
            }
        }
        stage ('运行容器'){
            steps {
                sh 'docker run -d -p ${port}:${port} --name ${appName} ${host}/dev/cloud/${appName}:${version}'
            }
        }
    }
}

以下示例:eureka/docker/Dockerfile

FROM java:8
MAINTAINER jjp
ADD eureka.jar /usr/local/eureka.jar
ENTRYPOINT ["java","-jar","/usr/local/eureka.jar"]

5.看下实际发布流程,展示效果

jenkins2 pipeline 持续集成_第7张图片

打开http://ali:8761/,我的注册中心是否已经启动成功。

jenkins2 pipeline 持续集成_第8张图片

你可能感兴趣的:(杂文,jenkins2,pipeline)