阿里雲的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
配置好後,保存-運行 就可以看效果啦
有了自定義步驟,擴展性、靈活性就高很多了