阿里云效流水线:自定义步骤(step),实现oss操作

阿里云的CI/CD工具流水线(Flow)用了有两年了,还挺好用,个人感觉比之前用 jenkins 要舒服(也可能之前用的 jenkins 版本比较老吧);

最近部署一个稍微特殊一点的前端项目,部署到oss,像之前那样用流水线自带的步骤只能上传已经满足不了需求。

然后在添加步骤里看到自定义步骤:

点进去就是教程文档, 文档不是最新版,但是出入不大,跟着文档来基本不会有大问题。

有个小点需要注意:

flow login 命令在linux系统执行可能会遇到

listen tcp :80: bind: permission denied

这个是普通用户没有权限监听80端口,需要root权限,以及如果80端口占用应该也是不行的;

 

然后就是实现对oss的操作

1.集成oss客户端进步骤容器

经过对比, ossutil 命令行客户端比较适合这个场景,且功能比较丰富;

a.下载 ossutil 二进制文件,放到你的步骤目录

b.再创建一个配置文件 .ossutilconfig 

[Credentials]
language=CH
accessKeyID=AKID
accessKeySecret=AKS
endpoint=EP

AKID,AKS,EP 这些相当于占位标识,可以自定义,后面会用到;

c.编辑 Dockerfile

FROM registry.cn-beijing.aliyuncs.com/rdc-builds/base:1.0
MAINTAINER banli <[email protected]>

WORKDIR /root/

COPY .step/*.sh ./
COPY banli-oss/step.sh ./step.sh
RUN chmod +x ./*.sh

#拷贝 ossutil 二进制文件和配置文件进镜像
COPY banli-oss/ossutil64 /usr/local/bin/ossutil64
COPY banli-oss/.ossutilconfig ./.ossutilconfig

#修改二进制文件权限
RUN chmod +x /usr/local/bin/ossutil64

#追加环境变量
ENV PATH=/usr/local/bin:$PATH

ENTRYPOINT [ "/root/entry.sh"]

2.实现 oss 鉴权和执行命令

a.编辑 step.yaml 实现步骤表单

---
name: OSS-Shell
sign: banli-oss
description: 使用ossutil操作oss
#这里填镜像推送的"目的地"仓库地址,要求公开可访问,所以要注意镜像里不能包含敏感信息
image: registry.cn-beijing.aliyuncs.com/***/***:banli-oss
items:
  - label: accessKeyID
    name: accessKeyID
    type: input
  #密钥配置为password类型
  - label: accessKeySecret
    name: accessKeySecret
    type: password
  - label: endpoint
    name: endpoint
    type: input
  #bucket名
  - label: bucket
    name: bucket
    type: input
  #要执行的 ossutil 相关命令
  - label: 执行命令
    name: command
    type: shell
    rules:
    value: |
      # input your command here
      pwd

这里有个小问题:这样配置的表单每一项默认都是必填的,跟文档有点出入,也没有找到如何去掉必填,我这块刚好都需要必填就没有深究。

b.编辑步骤shell文件 step.sh

#!/bin/bash
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

#将用户在步骤表单填写的oss认证信息替换进 ossutil 配置文件
sed -i "s/AKID/${accessKeyID}/g" /root/.ossutilconfig
sed -i "s/AKS/${accessKeySecret}/g" /root/.ossutilconfig
sed -i "s/EP/${endpoint}/g" /root/.ossutilconfig

#执行表单中用户填写的shell脚本
sh -ex $WORK_SPACE/user_command.sh

 

至此,所有准备都已就绪,通过文档里的命令推送步骤至阿里云,就可以在添加步骤-企业步骤中看到自己的步骤

3.配置使用步骤

a.填写相关参数

b.编写操作oss的脚本

# input your command here
pwd
ossutil64 ls #这里就可以直接使用ossutil工具的命令
ossutil cp -r $PROJECT_DIR/dist/ oss://${bucket}/pj-app-build/ --update
ossutil64 rm oss://${bucket}/pj-app/index.html -rf
ossutil64 rm oss://${bucket}/pj-app/static -rf
ossutil64 cp oss://${bucket}/pj-app-build/$BUILD_NUMBER/ oss://${bucket}/pj-app/ -r --update

配置好后,保存-运行 就可以看效果啦

 

有了自定义步骤,扩展性、灵活性就高很多了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章