使用 vscode 插件 vscode-jenkins-pipeline-linter-connector 和 LLMs 大模型校驗(yàn)?zāi)愕?Jenkinsfile

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 中使用到它, 鏈接如下:

現(xiàn)在你應(yīng)該能在插件搜索里搜索到它, 使用 yeshan333.jenkins-pipeline-linter-connector-fork 去搜索安裝即可:

search extendsion

配置插件

插件的文檔里已經(jīng)給出了幾個示例配置, 將配置填入你的 vscode 用戶配置 json 文件中即可:

settings
{
    "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)行配置:

settings

配置完成之后直接通過命令面板 (Command Pallette) 使用 Validate Jenkins 即可開啟 Jenkinsfile 校驗(yàn):

https://upload-images.jianshu.io/upload_images/14206039-3b66da8990e4288e.png

接下來介紹如何使用 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>",
}

其中 baseUrlapiKey 需要我們到 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" 中.

GET API Token and ACCOUND_ID

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)的同時也會同時向大模型詢問評審意見, 大致效果如下:

review with LLMs

本文由博客群發(fā)一文多發(fā)等運(yùn)營工具平臺 OpenWrite 發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末残邀,一起剝皮案震驚了整個濱河市瘪匿,隨后出現(xiàn)的幾起案子判耕,更是在濱河造成了極大的恐慌透绩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壁熄,死亡現(xiàn)場離奇詭異帚豪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)请毛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門志鞍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞭亮,“玉大人方仿,你說我怎么就攤上這事⊥臭妫” “怎么了仙蚜?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厂汗。 經(jīng)常有香客問我委粉,道長,這世上最難降的妖魔是什么娶桦? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任贾节,我火速辦了婚禮汁汗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栗涂。我一直安慰自己知牌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布斤程。 她就那樣靜靜地躺著角寸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忿墅。 梳的紋絲不亂的頭發(fā)上扁藕,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機(jī)與錄音疚脐,去河邊找鬼亿柑。 笑死,一個胖子當(dāng)著我的面吹牛棍弄,可吹牛的內(nèi)容都是我干的橄杨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼照卦,長吁一口氣:“原來是場噩夢啊……” “哼式矫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起役耕,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤采转,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瞬痘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體故慈,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年框全,在試婚紗的時候發(fā)現(xiàn)自己被綠了察绷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡津辩,死狀恐怖拆撼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喘沿,我是刑警寧澤闸度,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蚜印,受9級特大地震影響莺禁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窄赋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一哟冬、第九天 我趴在偏房一處隱蔽的房頂上張望楼熄。 院中可真熱鬧,春花似錦浩峡、人聲如沸孝赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽青柄。三九已至,卻和暖如春预侯,著一層夾襖步出監(jiān)牢的瞬間致开,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工萎馅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留双戳,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓糜芳,卻偏偏與公主長得像飒货,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子峭竣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容