文章目錄
將 Jenkins 建立在 Windows Container 上
公司服務有逐步採用 container 技術的打算,首先第一步就是將 CI Server 給搬進 container,而這個想法老早就有人實際應用了,只是大多應用在 linux 上,對於使用 .Net 技術的團隊幫助有限,因為傳統 .Net 技術的 compiler 需要 .Net Framework 無法完全擺脫 Windows 環境
身為 .NET 開發工程師,就來看看如何將 Windows 環境中的 Jenkins 搬到 container 中吧
前置作業
以下指令請使用 PowerShell 執行
建立 Jenkins container 使用的資料夾
建立根資料夾
New-Item -Type Directory -Name jenkins -Path c:\
建立 Jenkins 安裝檔存放資料夾
New-Item -Type Directory -Name setup -path C:\jenkins\
下載 Jenkins
請自行至 官網 下載安裝程式,並解壓縮取得
Jenkins.msi
將 Jenkins 安裝檔複製至
setup
資料夾中
建立 container
建立 container 並直接執行 PowerShell
指定 port mapping 及 volume folder mapping
docker run -it -p 8080:8080 --name winjenkins -v c:\jenkins:c:\jenkins microsoft/windowsservercore powershell
安裝 jenkins
msiexec.exe /i C:\jenkins\setup\jenkins.msi /qn
安裝完成後在
C:\Program Files (x86)\
會出現jenkins
資料夾因為使用靜默安裝,安裝完成不會有提示,安裝大約耗時一兩分鐘
正常使用
在 container 的 host server 上需要使用 container 內部 ip 來連線
windosw container 尚未支援
localhost
port mapping 至 container 中在其他機器中就直接使用
host server ip
+前面 mapping 的 port
來連線取得 jenkins 驗證 key
在 container 中執行
type 'C:\Program Files (x86)\Jenkins\secrets\initialAdminPassword'
心得
測試好幾天才成功,分享一下過程:
前幾天一直在自己的 windows server 2016 上進行測試,後來才發現我的 windows server 2016 上 container 網路一直有問題,但我認為這應該是個案,記得之前在其他 windows server 2016 上並沒有這個問題
在建立 container 時就直接進入 container 安裝 jenkins 是最容易的。我嘗試過先啟動 container 再透過
docker exec -it winjenkins powershell
進入 container,發現 container 已經出現 exited,原因還沒有細查在 host 上執行
type 'C:\Program Files (x86)\Jenkins\secrets\initialAdminPassword'
會有權限問題而無法直接取得initialAdminPassword
以上作法個人覺得還有改善空間,包含 image 大小、安裝簡化,但至少驗證在 windows 上安裝 container 是可行的
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。