阿里云首页 云效2020

Flow CLI 子命令:step

Flow 是「流水线」飞流推出的一款命令行工具,用以管理飞流中各种资源,子命令 step 可以让用户在飞流流水线中运行自定义镜像及命令达到扩展流水线能力的效果。

Flow 中一个流水线中运行的镜像被称为一个“步骤”,步骤是有一段描述 yaml 和一个 docker 镜像组成的一个最小运行单元,yaml 描述决定步骤运行时的入参,docker 镜像决定步骤运行的环境;这篇文档将引导用户在 Flow 上创建一个自定义步骤。

下载安装

操作系统

下载链接

MacOS

darwin/386

darwin/amd64

Windows

windows/386

windows/amd64

BSD

freebsd/386

freebsd/arm

freebsd/amd64

netbsd/386

netbsd/amd64

openbsd/386

openbsd/amd64

Linux

linux/386

linux/arm

linux/amd64

linux/mips

linux/mips64

linux/mipsle

linux/mips64le

linux/s390x

以 Mac 为例:

$ curl https://rdc-plugin-storage.oss-cn-beijing.aliyuncs.com/flow-cli/0.0.6/aliyun/flow-step-cli_darwin_amd64 -o /usr/local/bin/flow && chmod +x /usr/local/bin/flow 
$ flow -v

登录 Flow

$ flow login                    # 登录

浏览器会打开进入 Flow 登录页面,如果已经登录会提示 success,登录成功后命令行会提示选择账号下企业,输入企业对应的数字进入企业。

新建步骤

$ flow step init my-step               # 新建步骤

这个命令会在本地创建如下文件:

.step
  |- ..
  |- entry.sh               # 步骤需要的基础脚本
my-step
  |- Dockerfile             # 用于构建步骤
  |- step.sh
  \  step.yaml              # 用于描述步骤所有信息的 yaml

step.yaml 里定义了步骤有关的描述:

---
name: 自定义步骤              # 步骤名称
sign: my-step               # 步骤唯一标识
description: 我的第一个步骤
image: registry.cn-beijing.aliyuncs.com/build-steps/my-step:1.0  # 步骤运行时镜像
items:                      # 入参表单
  - label: 执行命令
    name: command
    type: shell
    value: |
      # input your command here
      echo hello,world!

items 使用 schema 对应 react 组件的方式定义了流水线编辑页面中供用户配置的表单,支持多种前端组件,如 input, dropdown, checkbox;更多语法见步骤 yaml 描述语言

Dockerfile 中包含了步骤运行时所需要的环境,目前步骤所需的镜像必须是公网不通过认证可拉取的。

FROM registry.cn-beijing.aliyuncs.com/rdc-builds/base:1.0
MAINTAINER xxx <xxx@alibaba-inc.com>
COPY .step/*.sh /root/
COPY my-step/step.sh /root/step.sh
RUN chmod +x /root/*.sh
ENTRYPOINT [ "/root/entry.sh"]

step.sh 既步骤执行的命令,step.sh 在流水线中运行时可以以环境变量的方式获取到来自流水线上下文的系统变量,以及用户通过编辑页面、运行传入的方式写入的入参,脚本中列举了一部分可供使用的环境变量:

#!/bin/sh
set -e                                     # 脚本遇到错误退出
# 系统提供参数,从流水线上下文获取
echo [INFO] PIPELINE_ID=$PIPELINE_ID       # 流水线ID
echo [INFO] PIPELINE_NAME=$PIPELINE_NAME   # 流水线名称
echo [INFO] BUILD_NUMBER=$BUILD_NUMBER     # 流水线运行实例编号
echo [INFO] EMPLOYEE_ID=$EMPLOYEE_ID       # 触发流水线用户ID
echo [INFO] WORK_SPACE=$WORK_SPACE         # /root/workspace容器中目录
echo [INFO] PROJECT_DIR=$PROJECT_DIR       # 代码库根路径,默认为/root/workspace/code
echo [INFO] PLUGIN_DIR=$PLUGIN_DIR         # 插件路径,默认为/root/workspace/plugins
echo [INFO] BUILD_JOB_ID=$BUILD_JOB_ID     # build-service 任务ID
cd $PROJECT_DIR                            # 进入代码库所在路径
# sh -ex $WORK_SPACE/user_command.sh         # 执行 command 脚本

yaml 中的 command 入参会被放到$WORK_SPACE/user_command.sh文件中,删除最后一行行首的注释,即在步骤中可执行用户填入的命令。

上线步骤

$ flow step publish my-step             # 发布镜像

这个命令会执行两个动作:第一步是将本地的 Dockerfile 构建成为 step.yaml 中的 docker 镜像并 push 到远端仓库;第二步是将 step.yaml 描述的步骤原信息 publish 到云效的服务器。

使用flow step ls查看已经发布的步骤

使用步骤

进入 Flow 流水线页面,从空模板创建流水线,点击阶段 ->添加步骤->自定义步骤,找到刚才创建的步骤。

步骤添加完成之后,可以对 command 中的内容进行编辑,点击保存并运行

可以看到步骤在流水线中运行起来,并打印出 hello, myStep!

更新步骤

编辑 my-step/step.yaml 文件,在 item 中加入如下元素:

- label: 人称                
    name: STEP_PERSON         
    type: select               
    datasource:                
      - label: 你
        value: Your
      - label: 我
        value: My
      - label: 他
        value: His
  - label: 名字                 # 表单元素名称
    name: STEP_NAME            # 环境变量名称
    type: input                # 表单元素类型

再运行flow step publish my-step, 进入流水线编辑页面,删除并重新添加自定义步骤,可以看到编辑页多出了一个下拉框和一个输入框,分别填入相应的值,并在执行命令中打印出$STEP_PERSONSTEP_NAME两个变量:再执行flow step publish my-step,回到流水线边界页面,刷新缓存后,把之前添加的步骤删除再重新添加,可以看到编辑页中多了一个下拉框和一个输入框,填入相应的参数,在执行命令输入框中打印出$STEP_PERSON和再点击保存运行。

可以看到编辑页中填入的参数被打印出来了。同样在 step.sh 中也可以使用表单传入的参数。

首页 云效2020 云效流水线 Flow CLI 工具 Flow CLI 子命令:step