江小南

V1

2022/06/16阅读:18主题:默认主题

Pipeline之使用Jenkins进行流水线构建

说明

在前面的文章中,我们在Jenkins中使用自由风格构建任务。今天我们使用流水线构建任务,更加符合企业级开发使用。

在构建流水线之前,我们需要在Jenkins中安装Pipeline插件。同时要了解Pipeline脚本语法。插件安装的方法在之前的文章中说过了,不在赘述。

Pipeline语法

官方案例

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

agent:指定任务在哪个集群节点中执行,any表示任意节点。stages:步骤有哪些。只需要粘贴复制stage就可以写出多个步骤。当然也可以定义environment设置全局变量。

构建流水线

  1. 新建流水线任务

这里有两种方式。Pipeline script表示你可以直接在下方文本域中写Pipeline脚本,脚本文件维护在Jenkins内部。Pipeline script from SCM表示可以将脚本维护在仓库中,为了方便修改,我们这里使用第二种。

使用这种方式脚本名称默认为Jenkinsfile。输入完成应用保存即可。

  1. 编写Pipeline脚本

在项目中编写Jenkinsfile文件。

// 所有的脚本命令放在pipeline中
pipeline {
    // 指定任务在哪个集群节点中执行,any表示任意节点
    agent any

    // 声明全局变量,方便后面修改使用
    environment {
        HARBOR_USER = 'admin'
        HARBOR_PWD = 'Harbor12345'
        HARBOR_ADDR = '114.116.110.197:80'
        HARBOR_REPO = 'registry'
        HOST_PORT = '8081'
        CONTAINER_PORT = '8080'
    }

    stages {
        stage('拉取代码') {
            steps {
				checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'http://114.116.110.197:8929/root/xxc_test.git']]])
            }
        }
        stage('maven构建') {
            steps {
				sh '/var/jenkins_home/maven/bin/mvn clean package -Dmaven.test.skip=true'
            }
        }
        stage('生成镜像') {
            steps {
				sh '''mv target/*.jar docker/
docker build -t ${JOB_NAME}:${tag} docker/'''
            }
        }
        stage('推送镜像') {
            steps {
				sh '''docker tag ${JOB_NAME}:${tag} ${HARBOR_ADDR}/${HARBOR_REPO}/${JOB_NAME}:${tag}
docker login -u ${HARBOR_USER} -p ${HARBOR_PWD} ${HARBOR_ADDR}
docker image prune -f
docker push ${HARBOR_ADDR}/${HARBOR_REPO}/${JOB_NAME}:${tag}'''
            }
        }
        stage('通知目标服务器部署') {
            // 注意deploy_jiangnan.sh的内容在双引号里
            steps {
				sshPublisher(publishers: [sshPublisherDesc(configName: 'jiangnan', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy_jiangnan.sh $HARBOR_ADDR $HARBOR_REPO $JOB_NAME $tag $HOST_PORT $CONTAINER_PORT", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
    // 通知内容
    post {
        success {
            dingtalk (
                robot: 'Jenkins-DingDing',
                type:'MARKDOWN',
                title: "success: ${JOB_NAME}",
                text: ["- 成功构建:${JOB_NAME}项目!\n- 版本:${tag}\n- 持续时间:${currentBuild.durationString}\n- 任务:${JOB_NAME}"]
            )
        }
        failure {
            dingtalk (
                robot: 'Jenkins-DingDing',
                type:'MARKDOWN',
                title: "fail: ${JOB_NAME}",
                text: ["- 失败构建:${JOB_NAME}项目!\n- 版本:${tag}\n- 持续时间:${currentBuild.durationString}\n- 任务:${JOB_NAME}"]
            )
        }
    }
}

编写完成提交gitlab仓库。

  • 方法技巧

脚本内容看起来很复杂,我们可以使用Jenkins工具帮助完成。

比如拉取代码步骤,可以选择checkout:Check out from version control。maven构建、生成镜像、推送镜像选择shell:Shell Script。通知目标服务器部署选择sshPublisher:Send build artifacts over SSH,在Exec command 中输入命令即可。按照自己的需求选择相应的步骤。

将生成的流水线脚本粘贴到Jenkinsfile中即可。

有些命令需要获取参数,参数可以填写在Pipeline的environment中,也可以选择参数化构建过程。

  1. 进行构建

通过流水线每一个步骤会清晰显示出来,有问题的步骤会报红,查看日志方便,很容易定位问题。

  1. 验证

Harbor仓库中有了v4.0.0的镜像。

目标服务器拉取到了镜像,并运行为容器。

钉钉通知成功。

  1. 访问

访问成功。

还有一些操作,比如构建成功或失败会有邮箱提醒,钉钉提醒等,需要安装相应的插件,然后进行相应的配置即可。可以自行测试。

流水线更适合企业级的开发。页面可以做二次开发,操作起来更简单,也更好看,下面是一张我们在工作中的截图。

分类:

后端

标签:

后端

作者介绍

江小南
V1