Jenkins 一直以來都是比較熱門的用來做 CI/CD 的自動化工具, 如果你使用過 GitHub Action, 和它類似, 現(xiàn)在大多數(shù)的自動化工具都會提供 DSL(領(lǐng)域特定語言)去描述 & 編排自動化工作流, Jenkins 的 Pipeline Syntax 就是 Jenkins 提供的編排語言, 對應(yīng)的編排文件一般稱之為 Jenkinsfile, 語法規(guī)則和 Groovy 很類似.
我平常使用 Declarative Pipeline Syntax 比較多, Jenkinsfile 的管理一般都會使用一個 Git 倉庫. 在本地編輯完成之后一直比較頭疼的是語法的校驗(yàn), 經(jīng)常需要代碼提交之后實(shí)際去跑 Pipeline 才能確認(rèn)有沒有語法問題.
其實(shí)這個語法校驗(yàn)在 Jenkins 的 UI 上配置是自帶的, 但總不能每次在代碼編輯器編輯之后再拷貝上去吧, Jenkins 的官方文檔也有建議本地開發(fā) Pipeline 的使用可以使用什么工具鏈 pipeline-development-tools. 可以使用命令行工具围来、Jenkins Open API芯咧、IDE 插件等可以去使用.
日常使用 Visual Studio Code 比較多, 所以最終選擇了 vscode 的插件 vscode-jenkins-pipeline-linter-connector
, 這個插件原理實(shí)現(xiàn)上還是通過將 Jenkinsfile 的內(nèi)容通過 API 提交給 Jenkins 去校驗(yàn)的.
不過插件已經(jīng)年久失修了, 代碼比較久了, 實(shí)際的使用上遇到了不少的問題, 例如:
- Jenkinsfile 帶有中文的話校驗(yàn)結(jié)果顯示容易亂碼, 比如這個 Jenkinsfile:
pipeline {
agent any
stages {
stage('Hello中文>>>>>') {
steps {
echo 'Hello Worl中文
}
}
}
}
校驗(yàn)結(jié)果返回會有段亂碼, 如下:
Errors encountered validating Jenkinsfile:
WorkflowScript: 6: unexpected char: 0xB8 @ line 6, column 36.
echo 'Hello World'??-???
插件實(shí)現(xiàn)依賴的基礎(chǔ)庫也比較老了, 所以我 fork 了一下原來插件, 做了下代碼重構(gòu)和部分問題的修復(fù) & 優(yōu)化工作, 主要如下:
- 修復(fù) Jenkinsfile 中文亂碼問題.
- 可以在不保存 Jenkinsfile 的時候直接進(jìn)行校驗(yàn).
- 文件保存的時候立即自動觸發(fā)校驗(yàn).
- 支持控制什么樣的文件名可以進(jìn)行校驗(yàn), 相當(dāng)于一個白名單機(jī)制, 可能會有些人會將工作流定義寫在另外的文件名下, 比如:
workflows.jenkins
等, 所以才有了這個特性. - 引入
langchain.js
和 Cloudflare 免費(fèi)的 Workers AI REST API 配置大模型做 Review. - ...
插件現(xiàn)在已經(jīng)同步發(fā)布到了 Visual Studio Code 商店和 Open VSX Registry 中, 理論上你可以在 Microsoft Visual Studio Code捻撑、code-server岗憋、VSCodium 等 vscode 系列 IDE 中使用到它, 鏈接如下:
- Microsoft Visual Studio Marketplace: https://marketplace.visualstudio.com/items?itemName=yeshan333.jenkins-pipeline-linter-connector-fork
- Open VSX Registry: https://marketplace.visualstudio.com/items?itemName=yeshan333.jenkins-pipeline-linter-connector-fork
現(xiàn)在你應(yīng)該能在插件搜索里搜索到它, 使用 yeshan333.jenkins-pipeline-linter-connector-fork
去搜索安裝即可:
配置插件
插件的文檔里已經(jīng)給出了幾個示例配置, 將配置填入你的 vscode 用戶配置 json 文件中即可:
{
"jenkins.pipeline.linter.connector.url": "https://jenkins.shan333.cn/pipeline-model-converter/validate",
"jenkins.pipeline.linter.connector.user": "jenkins_username",
"jenkins.pipeline.linter.connector.pass": "jenkins_password"
}
將 url毕箍、用戶密碼替換成你自己的 Jenkins 即可. 當(dāng)然你也可以在插件配置處直接進(jìn)行配置:
配置完成之后直接通過命令面板 (Command Pallette) 使用 Validate Jenkins
即可開啟 Jenkinsfile 校驗(yàn):
接下來介紹如何使用 LLM 去幫你評審 Jenkinsfile.
使用 LLM 大模型評審你的 Jenkinsfile
這一功能默認(rèn)是關(guān)閉的, 需要通過配置 jenkins.pipeline.linter.connector.llm.enable
去開啟,
功能開啟之后我們還需要幾個填寫幾個關(guān)鍵配置, 如下:
{
"jenkins.pipeline.linter.connector.llm.enable": true,
"jenkins.pipeline.linter.connector.llm.baseUrl": "https://api.cloudflare.com/client/v4/accounts/<CF_ACCOUNT_ID>/ai/v1",
"jenkins.pipeline.linter.connector.llm.modelName": "@cf/meta/llama-2-7b-chat-fp16",
"jenkins.pipeline.linter.connector.llm.apiKey": "<CF_API_TOKEN>",
}
其中 baseUrl
和 apiKey
需要我們到 Cloudflare 用戶管理后臺申請.
插件默認(rèn)會使用 Cloudflare Workers AI REST API 提供的文本生成模型去評審 review 我們的 Jenkinsfile, 目前它提供免費(fèi)額度基本夠日常使用.
Step 1: 你需要先按照 Cloudflare 提供的文檔去獲取 API 訪問的密鑰 -> Get started with the Workers AI REST API, 將獲取到的 API Token 填入配置 "jenkins.pipeline.linter.connector.llm.apiKey"
中.
Step 2: 在上一步, 你在申請的時候也會拿到一個 Account ID, 這個 ACCOUNT ID 用于組裝配置 "jenkins.pipeline.linter.connector.llm.baseUrl"
, 將 "https://api.cloudflare.com/client/v4/accounts/<CF_ACCOUNT_ID>/ai/v1"
的 <CF_ACCOUNT_ID>
替換為你的 Account ID 即可
配置 jenkins.pipeline.linter.connector.llm.modelName
是可選地, 你可以選用 https://developers.cloudflare.com/workers-ai/models/#text-generation 提到的任意一個文本生成模型去做評審.
將上述配置配置完成之后, 通過 vscode 命令面板 (Command Pallette) 使用 Validate Jenkins
開啟 Jenkinsfile 校驗(yàn)的同時也會同時向大模型詢問評審意見, 大致效果如下:
本文由博客群發(fā)一文多發(fā)等運(yùn)營工具平臺 OpenWrite 發(fā)布