阿里雲效流水線:自定義步驟(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

配置好後,保存-運行 就可以看效果啦

 

有了自定義步驟,擴展性、靈活性就高很多了

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