实践手册:基于第三方DevOps流水线实现DMS Airflow任务自动化CICD

DMS支持通过第三方DevOps流水线(包含阿里云云效流水线Flow和在Jenkins配置的流水线)触发Airflow任务自动化CICD(持续集成和持续交付/部署)。本文为您介绍如何搭建云效流水线和Jenkins流水线。

背景信息

流水线Flow是一款企业级、自动化的持续集成和持续交付的工具,可以帮助企业实现从代码开发到部署到生产环境的全流程自动化。该工具能够提升开发效率、加快交付速度和减少出错率。

前提条件

搭建Airflow环境

配置云效流水线

步骤一:创建流水线

  1. 登录流水线 Flow控制台。

  2. 我的流水线页面,单击右上角新建流水线。更多信息,请参见新建第一条流水线

  3. 可视化编排页签下,单击左侧导航栏的空模板,选中空模板,并单击创建

    创建完成后,页面会自动跳转至流水线编辑页面。

    image

步骤二:配置触发源来触发流水线运行

流水线的触发源包括WebhookGitHub仓库两种方式。

手动配置Webhook

  1. 在流水线触发设置页面,打开Webhook触发开关。

    image

  2. 复制通用Webhook地址,并单击右上角的仅保存

  3. 打开您的GitHub仓库,在顶部菜单栏选择Settings,再单击左侧导航栏的Webhooks

  4. 单击Add webhook

    image

  5. 将复制的通用Webhook地址填入Payload URL参数区域,并选择触发类型(其他参数保持默认值即可),再单击Add webhook

关联GitHub仓库

  1. 进入流水线 Flow流程配置页面,单击添加流水线源

  2. 代码源页面选择Github,再单击添加

    初次配置需要添加服务连接,进行GitHub授权,即可添加Git仓库。

    image

  3. 添加GitHub仓库后,选择代码仓库以及默认分支,并选择开启代码源触发

    此处需要复制Webhook地址。

  4. 打开目标GitHub仓库,在顶部菜单栏选择Settings,再单击左侧导航栏的Webhooks

  5. 单击Add webhook

    image

  6. 将复制的通用Webhook地址填入Payload URL参数区域,并选择触发类型,单击添加。其他参数保持默认值即可。

关联GitLab仓库

  1. 流水线 Flow流程配置页面,单击添加流水线源

  2. 代码源页面选择自建Gitlab

  3. 填写代码仓库默认分支参数信息、选择凭证类型组织公钥(组织公钥是在GitLab账户中设置中生成),并开启代码源触发。其他参数值保持默认即可。

    开启代码源触发后,请复制Webhook地址。

    image

  4. 打开目标GitLab仓库,进入Webhook设置页面,在Webhook网址参数区域填写Webhook地址,并根据需求选择触发源。

  5. 单击Add webhook即可。

步骤三:配置全局环境变量

全局环境变量在整个流水线的各个任务节点都可以被使用。

  1. 流水线 Flow编辑页面,单击变量和缓存

  2. 字符变量区域,单击新建变量

  3. 添加下列变量以及默认值,再单击添加

    变量及说明如下:

    变量名称

    是否必填

    说明

    ALIBABA_CLOUD_ACCESS_KEY_ID

    阿里云账号的AccessKey

    ALIBABA_CLOUD_ACCESS_KEY_SECRET

    阿里云账号的AccessKey Secret

    DMS_CICD_PROJECT_ID

    工作空间的REPOS(代码仓库)项目ID

    DMS_CICD_BRANCH_NAME

    部署分支

    DMS_CICD_WORKSPACE_ID

    工作空间ID

步骤四:配置任务流

  1. 删除流程中阶段1的空任务节点。

    在流程配置页面,选中并删除空任务节点。

    image

  2. 创建新节点。

    单击新阶段区域的新的任务,找到执行命令节点。

    image

  3. 编辑执行任务节点。

    进入节点编辑页面,配置任务节点相关参数。您仅需配置如下参数,其他参数保持默认值即可。

    参数项

    说明

    任务名称

    每个任务节点对应一个部署环境,建议每个任务节点的名称都能体现出该节点的环境信息。如:dev环境。

    构建集群

    保持默认选择(云效北京构建集群)即可。

    下载流水线

    选择不下载流水线源

    任务步骤

    展开执行命令的文本框,再填入如下脚本。

    wget 'https://dms-cicd-tool-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/dms_cicd_tool'
    chmod +x ./dms_cicd_tool
    ./dms_cicd_tool
  4. 为任务节点配置环境变量。

    在节点编辑页面的环境变量区域,选择添加 > 自定义参数

    变量名称

    含义

    是否必填

    示例值

    DMS_CICD_DEPLOY_COMMON

    部署任务备注

    DEV环境部署测试

    DMS_CICD_DEPLOY_PARAM

    部署任务额外参数

    {"param1":"value1"}

    说明

    该变量为局部变量,即只在该任务节点生效。

  5. 参照2、3、4步骤即可创建并配置多个任务节点。

    示例如下:

    image

  6. 单击页面右上角的仅保存

步骤五:运行并查看流水线运行记录

配置触发源完成后,将由Webhook自动触发任务运行。您也可以选择手动运行任务。

  • 手动运行任务

    单击流水线编辑页面右上方的保存并运行

  • 查看运行记录

    在运行历史页面,单击查看,即可查看所有流水线运行的具体情况,包含任务节点的运行耗时和运行日志。单击任务节点区域的日志,即可查看目标节点的运行结果以及部署失败原因等信息。

    image

    说明
    • 任务节点运行成功标志:在执行命令区域出现XXX success

    • 任务节点运行失败标志:在执行命令区域出现XXX failed

配置Jenkins流水线

步骤一:配置流水线脚本

  1. 登录Jenkins。

    若您未下载Jenkins,则请进入Jenkins官网下载安装。

  2. 在左侧导航栏单击新建任务

  3. 输入任务名称,单击流水线页签。

    根据实际情况修改如下脚本中的ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRETWebhook Token等信息,并将内容复制到文本框中,再单击保存

    pipeline { 
        agent any 
        environment { 
            DMS_CICD_PROJECT_ID=xxxx
            DMS_CICD_BRANCH_NAME="master"
            ALIBABA_CLOUD_ACCESS_KEY_ID="xxxxx"
            ALIBABA_CLOUD_ACCESS_KEY_SECRET="xxxxx"
            DMS_CICD_WORKSPACE_ID=xxxx
        }
        stages {
            stage('Build') {        
                steps { 
                    sh 'wget "https://dms-cicd-tool-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/dms_cicd_tool"'
                    sh 'chmod +x ./dms_cicd_tool'
                    echo 'Build step finished' 
                }
            }
            stage('Deploy') {
                steps {
                    sh './dms_cicd_tool'
                    echo 'Deploy finished'
                }
            }
        }
    }

步骤二:配置Trigger

后续Airflow任务由Trigger自动触发运行。您也可以在Airflow空间手动运行任务。

  1. 确保Jenkins已安装插件Generic Webhook Trigger。

    进入流水线项目,单击系统管理 > 插件管理,选中Generic Webhook Trigger并填写GitLab Token。

    GitLab Token可在关联GitLab操作中获取。

    image.png

  2. 设置GitHub触发。

    1. 在目标GitHub仓库的顶部菜单栏单击Settings,再单击左侧导航栏的Webhooks

    2. 单击Add webhook

    3. 将流水线的通用Webhook地址填入Payload URL区域,在Secret区域填入Token,并选择触发类型

    4. 单击添加

  3. 设置Gitlub触发。

    1. 打开目标Gitlub仓库,选择设置 > Webhooks

    2. 将流水线的通用Webhook地址填入Payload URL区域,在Secret区域填入Token,并选择触发来源

    3. 单击Add Webhook。

其他操作

查看REPO项目ID

进入工作空间,单击左侧菜单栏的image,在REPOS区域单击目标仓库右侧的image图标,即可查看REPO项目ID

image