阿里云的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
配置好后,保存-运行 就可以看效果啦
有了自定义步骤,扩展性、灵活性就高很多了