# 再 Jenkins 底下執行 NodeJs ###### tags: `Jenkins` ## 介紹 npm為現今最熱門的套件管理系統,在運行時會需要安裝`Node.js`。延續上一篇[透過 Docker 建立 Jenkins](/HzNLqx2TSA6885MXaDkE-A)完成後,接著我們想要再作業上操作`npm`相關指令,此篇就是來說明如何在Jenkins上運行。 ## 目錄 [TOC] # 一、前言 這邊會直接再所建立的Jenkins(master node)上操作,不過實際運作上建議再建立一個agent node下去執行,主要理由為安全性問題詳情可以參考[文章](https://www.jenkins.io/doc/book/security/controller-isolation/#not-building-on-the-built-in-node),接著直接進入實作環節。 # 二、套件安裝 登入Jenkins後點選左側選單**管理Jenkins**進入管理頁面,接著點選**管理外掛程式**如下圖: ![](https://i.imgur.com/ZZyEpVE.png) 接著再搜尋框輸入**node**並選擇下方的**NodeJs**,之後點選下方安裝即可 ![](https://i.imgur.com/x0X55QA.png) 這邊可以點選下方選項讓Jenkins重新啟動 ![](https://i.imgur.com/2YyRl8x.png) :::info :bulb: 如果跟我一樣是使用Docker運行記得手動去啟動Jenkins,別傻傻的等 ::: # 三、全域工具設定 直接進入**管理Jenkins**頁面,接著點選**全域工具設定**如下圖: ![](https://i.imgur.com/GqCbZln.png) 進入頁面後拉到最下方會出現一個NodeJs的設定選項 ![](https://i.imgur.com/DOrMVr3.png) 接著這邊說明三種方式較常使用指定Nodejs的方式 ## 1. 自動安裝 直接選擇需要的版本,名稱的話直接輸入對應版本名稱,接著點選儲存即可 ![](https://i.imgur.com/okW3jjX.png) ## 2. 自動安裝 - 透過指定路徑下安裝 在某些情況下安裝相關軟體都必須走公司的規定,其中也提供透過連接下載安裝檔並安裝的方式 ![](https://i.imgur.com/TJ3liZE.png) ## 3. 已安裝指定 當如果你已經安裝好了Nodejs,此時只需要指定路徑即可 ![](https://i.imgur.com/kJsDNTt.png) # 四、作業Node語法測試 這邊直接點選**新增作業**來新增一筆作業 ![](https://i.imgur.com/v4OeZqr.png) 接著取個好名字,接著我們這邊是使用Pipeline流程來進行操作,接著點選確定 ![](https://i.imgur.com/G4G2Un8.png) 進入畫面後直接捲到最下方的Pipeline區塊進行腳本撰寫,完成後直接點選儲存 ![](https://i.imgur.com/Cro7jb8.png) 這邊直接附上腳本 ```json= pipeline { agent any tools { nodejs '16.17.1' } stages { stage('NodeVer') { steps { echo 'Hello World' sh 'npm version' } } } } ``` 該腳本大致上小小說明一下 * agent any:在任何可用的代理上執行 * tool 區塊:這邊指定了Nodejs的版本 * stages 區塊:可以將各階段進行分類,並且相關運行可以寫在steps當中 ## 運行建置 手動運行非常簡單,這邊直接點選**馬上建置**會直接運行,下方則會有建置編號 ![](https://i.imgur.com/bWH3bnu.png) 點選建置編號後可以查看該流程下的相關資訊,點選**Console Output**會看到運行輸出,從輸出可以看到再安裝NodeJs ![](https://i.imgur.com/1KrqlhU.png) 最後附上腳本運行結果,其Node版本為所指定的`16.17.1` ![](https://i.imgur.com/hyRJ0FH.png) :::info :bulb: 這邊使用自動安裝的方式,所以在執行時會先下載安裝對應的NodeJs,第二次執行則會直接執行 ::: # 結論 經過這樣簡單操作下來,可以發現我們能透過腳本進行許多自動化的作業,這邊只是針對`npm`做版本顯示,後續想要加入建置、測試及部屬...等作業也可以透過腳本來處理,這邊算是只做了一個小小的起頭,未來有機會在將其它流程加入。 <br/> --- <style> .red{color: red;} </style>