1. Jenkins 安裝插件的兩種方式
2. 添加憑據(Credentials)
3. 系統管理——全局工具配置
4. 系統管理——系統設置
5. 常用插件說明
6. 環境變量
7. 用戶登錄與權限設定
8. 使用視圖
9. 歸檔構建產物
10. Jenkins 使用小技巧
1. Jenkins 安裝插件的兩種方式
方式一:通過插件管理下載指定的插件
進入 Jenkins 首頁-->系統管理-->插件管理-->可選插件頁面,在右上角的過濾框中輸入插件部分或全部名稱並回車,在搜索出的內容中查找待安裝的插件。
按照以下步驟在 filter 中輸入想要安裝的插件部分命名,比如我們想安裝 GitHub Branch Source,輸入 github 后回車,在篩選后的頁面中找到想要的插件,勾選左側的方框后,選擇 install without restart 或者 Download now and install after restart。
(若已經安裝過該插件,則顯示不出來 github 的插件)如下提示表示安裝成功:
方式二:上傳已下載好的 .hpi 文件
進入 Jenkins 首頁-->系統管理-->插件管理-->高級,將頁面拉到最后,按如下操作:
如下提示表示安裝成功:
2. 添加憑據(Credentials)
Jenkins 訪問 tomcat 或者 github 是有可能會需要這些工具能夠識別的憑證才能訪問,Jenkins 也提供了設置 Credentials 的功能,有 2 種方法添加憑據:
方法一:在 Jenkins 首頁的憑據中進行添加
進入 Jenkins 首頁-->單擊憑據:
如果之前添加過的話會顯示所有添加的憑據,類似於以下內容:
添加新的憑據
憑據類型說明
- Secret text:例如 API token(例如 GitHub 的個人 access token)。
- Username with password:用戶名和密碼 ,可以作為單獨的組件處理,也可以作為 username:password 格式的冒號分隔字符串來處理(請參閱處理憑據中的更多信息)。
- Secret file:包含密鑰的文件 SSH Username with private key:一個 SSH 密鑰對。注意:直接選擇回車可以復制私鑰的文本並將其粘貼到生成的密鑰文本框中。
- Certificate:一個 PKCS#12 證書文件 和可選的密碼。
為 github 添加 Username with password 類型的憑據
- 用戶名和密碼:如果該憑證是為 Jenkins 訪問 github 使用的話,那么用戶名和密碼就是 github 登錄的用戶名和密碼。
- ID:在 Jenkins 中使用的一個變量名。
方法二:新建任務后,配置過程中出現類似的操作按鈕
直接單擊 Add 添加憑據即可,出現如下的對話框,和方法一的一致:
3. 系統管理——全局工具配置
以上工具都有自動安裝的選項,不過建議手動安裝。
以上配置完成后,將頁面拉到最后,單擊 Save 保存即可。
4. 系統管理——系統設置
主目錄
默認的主目錄如下,可以點開右上角的問號,按照提示信息修改,一般不用改。
系統消息
可以點開右側的問號,看到系統消息的作用就是顯示在首頁頂部的一些公告信息,比如輸入內容如下:
單擊保存后,回到 Jenkins 首頁,可以看到如下內容:
該內容默認是純文本形式的,如果想要更高級的可以使用 HTML 格式控制顯示內容的格式,但是需要切換到設置-->Configure Global Security 中,標記格式器,選擇 Safe HTML,如下:
再進入到系統管理-->系統設置,輸入 HTML 格式的文本,保存。
在 Jenkins 首頁顯示的內容如下:
Maven 項目配置
執行者數量
默認值為 2,表示最多可以同時跑 2 個 job(有的版本叫 item)。
用法
有兩個選項:
當 Jenkins 有多個執行節點情況下的使用規則:
- 盡可能的使用這個節點:這是默認和常用的設置。在這種模式下,Jenkins 會盡可能地使用這個節點。任何時候如果一個構建能使用這個節點構建,那么 Jenkins 就會使用它。
- 只允許運行綁定到這台機器的 Job:這種模式下,Jenkins 只會構建哪些分配到這台機器的 Job。這允許一個節點專門保留給某種類型的 Job。例如,在 Jenkins 上連續的執行測試,你可以設置執行者數量為 1,那么同一時間就只會有一個構建,一個實行者不會阻止其它構建,其它構建會在另外的節點運行。
生成等待時間
默認值是 5 秒,表示創建一個 job 或 item 中的構建在開始之前需要等待的秒數,一般不做修改。
SCM 簽出重試次數
默認為 0,表示 Jenkins 從 git 或者其他源代碼管理工具中拉取代碼失敗時的嘗試次數,也可以在具體的項目中進行設置。
工程命名限制
如果勾選了此項,並且選擇的是 Pattern,那么創建 job(或者 item)時要滿足此規則才能創建成功。如下:
創建項目時不滿足以上規則會提示以下信息:
Jenkins Location
- Jenkins URL:我們只是演示用,不做修改,實際工作中 Jenkins URL 是需要改成具體的 IP 地址,這樣才能讓別人訪問。
- 管理員郵箱:測試完成后用來發送郵件或者一些警告信息,還有更靈活的發郵件規則需要借助第 3 方的插件。
配置 Jenkins 自帶的郵件功能
保存
配置完成后,單擊頁面最下方的保存按鈕:
5. 常用插件說明
Extended E-mail Notification
Jenkins 默認的郵件通知,能在構建失敗、構建不穩定等狀態后發送郵件。但是它本身有很多局限性,比如郵件通知無法提供詳細的郵件內容、無法定義發送郵件的格式、無法定義靈活的郵件接收配置等等。而 Jenkins Email Extension Plugin 能允許你自定義郵件通知的方方面面,比如在發送郵件時你可以自定義發送給誰,發送具體什么內容等等。
這里的發件人郵箱地址切記要和系統管理員郵件地址保持一致。
注意事項:
- 如果設置 QQ 郵箱的話,密碼必須為授權碼,開啟方法:登錄 QQ 郵箱,在”設置”-->“帳戶”里開啟“POP3/SMTP”並獲取授權碼(否則報錯 535)。
- 必須勾選【Use SMTP Authentication】【Use SSL】。
- 用戶名必須與系統管理員郵件地址保持一致(否則報錯 501)。
- 設置接收人(Recipients),多個接收人時用英文空格分隔。
1)Job 中使用 Extended E-mail
在任務的配置中,“構建后操作”中選擇“Editable Email Notification”選項即可使用 Extended E-mail Notification 插件。
基本配置
參數說明(這里只列出常用的參數):
- Project Recipient List:這是一個以逗號(或者空格)分隔的收件人郵件的郵箱地址列表。如果想在默認收件人的基礎上添加收件人:$DEFAULT_RECIPIENTS,<新的收件人>
- Default Subject:郵件主題,默認為 Extended E-mail Notification 配置的主題。
- Default Content:跟 Default Subject 的作用一樣,但是是替換郵件內容。
- Attach Build Log:將構建日志作為附件發送
- Compress Build Log before sending:發送壓縮格式的日志(zip 格式)
高級配置
單擊 Advanced Settings...,可以用來進行更細化的設置,比如:執行成功和執行失敗分別發送給不同的郵箱。
注意:默認情況下是沒有配置觸發器的,任務構建成功后會提示:No emails were triggered.。
參數說明:
在每個 Trigger 中都有高級配置項目,可以配置的內容和 Extended E-mail Notification 配置項目類似,這里修改的話會覆蓋之前的默認設置,具體不再贅述,配置項如下:
觸發器類型
注意:觸發器都只能配置一次。
- Aborted:終止時發郵件,比如構建過程中手動停止構建,配置后就會給指定郵箱發郵件。
- Always:不管什么構建情況都會發郵件。
- Before Build:當構建開始時發送郵件。
- Failure - 1st:第 1 次構建失敗時發送構建失敗的郵件。如果“Still Failing”觸發器已配
- 置,而上一次構建的狀態是“Failure”,那么“Still Failing”觸發器將發送一封郵件來替代(它)。
- Failure Still :如果兩次或兩次以上連續構建的狀態為“Failure”,發送該郵件。
- Unstable:即時發送構建不穩定的郵件。如果”Still Unstable”觸發器已配置,而上一次構建的狀態是“Unstable”,那么“Still Unstable”觸發器將發送一封郵件來替代(它)。
- Success:如果構建的狀態為“Successful”發送郵件。如果“Fixed”已配置,而上次構建的狀態為“Failure”或“Unstable”,那么”Fixed”觸發器將發送一封郵件來替代(它)。
- Fixed:當構建狀態從“Failure”或“Unstable”變為“Successful”時發送郵件。
- Still Unstable:如果兩次或兩次以上連續構建的狀態為“Unstable “,發送該郵件。設置好以上內容后,點擊保存。即 Job 中使用 Extended E-mail 設置完成。
2)全局設置
進入系統管理- 系統設置 - Extended E-mail Notification
SMTP 基礎設置
- SMTP server:郵件協議服務器。如 qq 郵箱則為 smtp.qq.com。
- Default user E-mail suffix:郵箱的后綴名。如 qq 郵箱則為 @qq.com。
- Default Content Type:默認的發送的郵件內容類型,默認是 text,我們選擇 HTML(test/html)。
- Default Recipients:默認的收件人列表,多個的話用逗號隔開。如果沒有被項目中的配置覆蓋的話,該插件會使用這個列表。可以在項目配置使用$ DEFAULT_RECIPIENTS,其參數包括此默認列表,也可以根據實際需要添加新的地址。
- Reply To List:回復列表。
- Emergency reroute:如果不為空的話,所有的郵件將只發送到指定的郵箱列表。
- Allowed Domains:允許發送的域名。比如:@domain1.com,domain2.com,那么任何匹配*@domain1.com 和*@*.domain2.com 都可以發送。
- Excluded Recipients:禁止發送郵件的郵箱地址Default Subject:默認的郵件主題。可以使用 Jenkins 自帶的一些全局變量。
- Maximum Attachment Size:最大的附件大小。
- Default Content:默認的郵件內容。
- Default Pre-send Script:默認發送前執行的腳本。
- Default Post-send Script:默認發送后執行的腳本。
- Default Triggers:當任務構建完成后選擇 Editable Email Notification 的話,滿足以下觸發的條件就會發送郵件。
- Content Token Reference:郵件中可以使用的變量。點擊右側的問號可以查看:
高級設置
- Use SMTP Authentication:勾選后才能看到用戶名和密碼。
- User Name:qq 郵箱用戶名(@qq.com 可以不寫)。
- Use SSL:使用安全連接。
- SMTP port:qq 郵箱 SSL 啟用就是 465/587,不啟用 ssl 就是 25。
設置好以上內容后,點擊保存。即全局設置完成。
3)Default Content
以下是網上找的 Default Content,供參考:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次構建日志</title> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> <tr> 本郵件由系統自動發出,無需回復!<br/> 各位同事,大家好,以下為${PROJECT_NAME }項目構建信息</br> <td><font color="#CC0000">構建結果 - ${BUILD_STATUS}</font></td> </tr> <tr> <td><br /><b><font color="#0B610B">構建信息</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul> <li>項目名稱 : ${PROJECT_NAME}</li> <li>構建編號 : 第${BUILD_NUMBER}次構建</li> <li>觸發原因: ${CAUSE}</li> <li>構建狀態: ${BUILD_STATUS}</li> <li>構建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> <li>構建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li> <li>工作目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> <li>項目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> </ul> <h4><font color="#0B610B">失敗用例</font></h4><hr size="2" width="100%" /> $FAILED_TESTS<br/> <h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4><hr size="2" width="100%" /><ul> ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}</ul> 詳細提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/> </td> </tr> </table> </body> </html>
效果如下:
Deploy war/ear to a container
這種方式能夠將生成的 war 包自動發布到指定 IP 的 Tomcat 中,前提是需要 Tomcat 已經啟動。
Tomcat Manager 是 Tomcat 自帶的、用於對 Tomcat 自身以及部署在 Tomcat 上的應用進行管理的 web 應用。Tomcat Manager 需要以用戶角色進行登錄並授權才能使用相應的功能,由於 Tomcat Manager 在默認的情況下是禁用的,因此需要我們進行相應的用戶配置之后才能使用 Tomcat Manager。用戶角色如下:
- manager-gui:允許訪問 html 接口(即 URL 路徑為 /manager/html/*)。
- manager-script:允許訪問純文本接口(即 URL 路徑為 /manager/text/*)。
- manager-jmx: 允許訪問 JMX 代理接口(即 URL 路徑為 /manager/jmxproxy/*)。
- manager-status:允許訪問 Tomcat 只讀狀態頁面(即 URL 路徑為 /manager/status/*)。
1)添加角色
新安裝的 tomcat,訪問 tomcat 的 Server Status、Manager App、Host Manager 三個頁面均顯示 403,需要在 conf/tomcat-users.xml 里添加配置。
如果想要訪問 manager 頁面,需要添加配置項:
<role rolename="manager-gui"/> <user username="admin"password="password" roles="manager-gui"/>
如果需要使用到遠程部署等功能,需要添加配置項:
<role rolename="manager-script" /> <user username="admin" password="password" roles="manager-gui,manager-script"/>
2)限制遠程訪問的解決方案
(Tomat7 不需要修改下面這兩個文件,只有 Tomcat7 以上才需要修改)
在 webapps 下的 host-manager 和 manager,都有名為 META-INF 的文件夾,里面都有 context.xml 文件,部分內容為:
<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" />
<Value> 此代碼的作用是限制來訪 IP 的,127.d+.d+.d+|::1|0:0:0:0:0:0:0:1 是正則表達式,表示 IPv4 和 IPv6 的本機環回地址,所以這也解釋了,為什么我們本機可以訪問管理界面,但是其他機器訪問返回 403。要修改為所有人都可以訪問,可以直接注釋掉或者改成這樣:
<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> </Context>
3)配置示例
如果 tomcat 在 linux 下的話,需要做如下配置,然后重啟 tomcat 即可。
在 tomcat/conf/tomcat-users.xml 追加以下內容:
<role rolename="tomcat" /> <role rolename="role1" /> <role rolename="manager-gui" /> <role rolename="manager-script" /> <role rolename="manager-status" /> <user username="tomcat" password="tomcat" roles="tomcat" /> <user username="both" password="tomcat" roles="tomcat,role1" /> <user username="role1" password="tomcat" roles="role1" /> <user username="deploy" password="tomcat" roles="admin,manager,manager-gui,manager-script,manager-status" />
tomcat/webapps/manager/META-INF/context.xml 如下圖所示,注釋掉 <valve> 標簽:
如果發布過程中提示:Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username you provided is not allowed to use the text-based Tomcat Manager (error 403)
則檢查以上 2 個文件是否正確配置。
Publish over SSH
- 利用此插件可以將編譯好的 war/jar 文件上傳到遠程 linux 指定的目錄下,在遠程執行腳本將拷貝的文件復制到 tomcat 的 webapps 文件夾下,重啟 tomact。
- 可以采用用戶名和密碼的方式登錄,也可以采用公鑰認證的方式。
1)插件說明
進入 Jenkins 主頁,系統管理 --> 全局工具配置,下拉到最后。
主配置項
- Passphrase:linux 下生成 ssh key 時加密使用的密碼,沒有的話不用填。
- Path to file:Jenkins 所在主機上保存 ssh 私鑰文件的路徑,可以是絕對路徑也可以是相對於 Jenkins_HOME 的路徑。
- Key:ssh 私鑰(包含頭尾----的內容),如果 key 和 path to file 均填寫了,那么以 key 中的內容為准。
- Disable exec:勾選此項后,此插件將不能執行指定的命令,默認即可。
Add an SSH Server:單擊“新增”按鈕
- Name:標識的名字,隨便寫,能方便區分即可。
- Hostname:需要連接 ssh 的主機名或 ip 地址(建議 ip)。
- Username:遠程主機登錄的用戶名,點擊高級后才能填寫密碼。
- Remote Directory:遠程目錄,指的是 ssh 文件上傳后,文件在遠程服務器上的保存路徑,路徑需要預先建立好。同時,如果上傳了文件后,需要執行命令的話,這也是 bat、shell 等命令的工作目錄。
高級配置項:單擊高級...按鈕
- Use password authentication, or use a different key:可以替換公共配置(選中展開的就是公共配置的東西,這樣做擴展性很好,不同的服務器有不同的密鑰)。
- Passphrase / Password:如果 Path to key 和 key 兩項有一個配置的話,此配置項表示密鑰加密時使用的 passphrase,如果 key 對應的輸入框是空的話,此配置項表示登錄的密碼。
- Path to key:同上。
- Key:同上。
- Port:端口(默認 22)。
- Timeout (ms):超時時間(毫秒)默認即可。
- Disable exec:同上。
- Test Configuration:測試是否可以鏈接到遠程服務器。
- Add more server configurations (if required):添加更多的服務器配置。
2)系統配置
用戶名和密碼方式連接
ssh 私鑰認證方式登錄
登錄 linux 系統,生成 SSH-key,SSH-key 是一對密鑰,一個公鑰,一個私鑰,用來在不同的電腦之間通過安全的連接進行數據交換。命令如下:
cd /root ls -al ~/.ssh //查看 id_rsa.pub 或 id_dsa.pub 是否存在 ssh-keygen //連續三次回車,即在本地生成了公鑰和私鑰,在生成過程中可以根據需要設置一個 passphrase,也可以不設置,生成的公鑰私鑰在~/.ssh 目錄下,id_rsa 是私鑰,d_rsa.pub 是公鑰 cat id_rsa.pub //可以看到生成的公鑰
補充:Linux CentOS 7 下 ssh 操作相關命令
重啟服務不再通過 service 操作,而是通過 systemctl 操作:
- systemctl status sshd.service:查看 sshd 服務是否啟動
- systemctl start sshd.service:如果沒有啟動,則需要啟動該服務
- systemctl restart sshd.service:重啟 sshd 服務
- systemctl enable sshd.service:設置服務開機自啟
3)項目配置
構建后操作→增加構建后操作步驟→Send build artifacts over SSH
- SSH Server Name:選一個在系統設置里配置的配置的名字。
- Transfer Set Source files:需要上傳的文件(注意:相對於工作區的路徑。看后面的配置可以填寫多個,默認用,分隔)。
- Remove prefix:移除目錄(只能指定 Transfer Set Source files 中的目錄)。
- Remote directory:遠程目錄(根據你的需求填寫,默認會繼承系統配置)。
- Exec command:把你要執行的命令寫在里面,腳本內容示例如下:
#替換 tomcat 中的舊文件 cp -r /tmp/myapp/interface_proj.war /usr/local/apache-tomcat-8.5.38/webapps # 關閉 tomcat sh /usr/local/apache-tomcat-8.5.38/bin/shutdown.sh sleep 15s #啟動 tomcat sh /usr/local/apache-tomcat-8.5.38/bin/startup.sh #驗證 tomcat 啟動 ps -ef|grep tomcat|grep start|grep -v 'grep'|awk '{print $2}'
高級設置
- Exclude files :排除的文件(在傳輸目錄的時候很有用,使用通配 符,例 如:**/*.log,**/*.tmp,.git/)。
- Pattern separator:分隔符(配置 Transfer Set Source files 的分隔符。如果這兒更改了,上面的內容也需要更改)。
- No default excludes:禁止默認的排除規則(具體的自己看幫助)。
- Make empty dirs:此選項會更改插件的默認行為。默認行為是匹配該文件是否存在,如果存在則創建目錄存放。選中此選項會直接創建一個目錄存放文件,即使是空目錄。(個人理解)
- Flatten files:只上傳文件,不創建目錄(除了遠程目錄)。
- Remote directory is a date format:遠程目錄建立帶日期的文件夾(需要在 Remote directory 中配置日期格式),具體格式參考下表:
Remote directory | Directories created |
'qa-approved/'yyyyMMddHHmmss | qa-approved/20101107154555 |
'builds/'yyyy/MM/dd/'build-${BUILD_NUMBER}' |
builds/2010/11/07/build-456 (if the build was number 456) |
yyyy_MM/'build'-EEE-d-HHmmss | 2010_11/build-Sun-7-154555 |
yyyy-MM-dd_HH-mm-ss | 2010-11-07_15-45-55 |
- Exec timeout (ms):腳本運行的超時時間(毫秒)。
- Exec in pty:模擬一個終端執行腳本。
- Add Transfer Set:增加配置。
其他
Jenkins 第一次啟動時會有推薦安裝的插件,以下插件不包含在推薦安裝列表中。
序號 | 插件名稱 | 作用 |
1 | Maven Integration | 用來創建 Maven 項目,不安裝的話不能創建 Maven 項目 |
2 | Deploy to container | 用來將 war 包部署到 tomcat 服務器上 |
3 | Generic Webhook Trigger | 用來創建 webhook,獲取源碼倉庫改動信息,自動觸發部署 |
4 | Email Extension | 郵件的擴展插件,可以定義不同構建結果情況下收件人,郵件 內容等 |
5 | Publish Over SSH | 用來實現遠程的自動部署 |
6 | Role-based Authorization Strategy |
實現基於角色的安全機制 |
7 | Performance | 將 jtl 文件展示為圖表 |
8 | HTML Publisher | 用來將 HTML 的測試結果展示到項目首頁 |
9 | Startup Trigger | 用來在 Jenkins 節點(master/slave)啟動時觸發構建,做一些 初始化工作 |
10 | Groovy | 用來在項目構建步驟中直接執行 Groovy 代碼 |
11 | Pipeline Utility Steps | pipeline 中類似於的 jdk 的插件,提供一些常用的方法 |
12 | Docker-build-step | 用來集成 Docker 相關操作 |
13 | Docker | 用來將 Docker 配置為雲 |
6. 環境變量
環境變量這個詞我們並不陌生,安裝完 java 或者 python 之后,為了在任意位置使用都需要將其安裝路徑加入到系統的環境變量中。類似的,Jenkins 也有環境變量,而且還可以分為內置的和自定義的環境變量。
1)內置環境變量
Jenkins 通過一個名為 env 的全局變量可以訪問內置的環境變量。在構建配置項下方,有項目可以使用的環境變量超鏈接,如下:
點擊之后,可以看到如下頁面內容(注意,不同的項目類型可以使用的環境變量會有些差異):
環境變量使用格式:
- windows:%變量名%,如 echo "%BUILD_NUMBER%",echo "%Jenkins_URL%"
- linux:$變量名或者${變量名},如 echo "{env.BUILD_NUMBER}",echo "$Jenkins_URL"
2)自定義全局環境變量
如果內置的環境變量不能滿足項目的需要,也可以自定義全局的環境變量。進入 Manage Jenkins-->Configure System 頁,下拉查找全局屬性,選中“Environment variables”,單擊 Add 按鈕可以在出現的框中添加變量名和變量值。如下所示:
自定義的全局變量也會被加入到 env 屬性列表中,像使用內置的環境變量一樣去使用。
7. 用戶登錄與權限設定
一個項目涉及到的人員有多個,比如開發、測試和運維,測試又有測試經理和普通測試工程師,他們的權限一般都是不一樣的,而且如果 Jenkins 集成的項目很多很復雜的時候,可能需要使用更細粒度的方式進行授權,不同的角色擁有不同的權限,如全局角色擁有所有項目的增刪改查權限;項目角色只是針對參與的項目有特定的權限。
Jenkins 默認的權限管理體系不支持用戶組或角色的配置,因此需要安裝第三發插件來支持角色的配置,我們采用的是 Role-based Authorization Strategy 插件(https://github.com/Jenkinsci/role-strategy-plugin/blob/master/README.md)。
1)安裝插件
Jenkins 首頁-->系統管理-->插件管理-->可選插件頁面,搜索 Role-based Authorization Strategy:
安裝成功后再已安裝的標簽頁就可以看到此插件:
2)添加用戶
需要先添加用戶,才能給用戶分別權限。
1)進入 Jenkins 首頁-->系統管理-->Manage Users:
2)創建新用戶:
3)配置全局安全策略
進入 Jenkins 首頁,單擊系統管理-->Configure Global Security,勾選 Role-Based Strategy:
開啟授權策略后,可以在系統管理頁面看到 Manage and Assign Roles 選項:
4)配置 Manage and Assign Roles 策略
使用 admin 登錄,進入 Jenkins 首頁,單擊系統管理-->Manage and Assign Roles,可以看到以下界面:
需要進行 Global roles、Project roles 兩個配置:
- Global roles 是一個整體權限的配置;Project roles 是項目權限的配置,類似於從大到小的原則進行分配。
- 項目角色與全局角色的區別就是:項目角色是用來管理項目的,沒有對 Jenkins 的管理權限;而全局角色更加側重於對於 Jenkins 的管理。
Manage Roles
global roles
可以看到 admin 是超級用戶,擁有所有的權限。點擊 Add 按鈕添加用戶,然后對該用戶的權限進行配置。注意:一般用戶要有 Overall 的 read 權限,不添加的話使用該用戶登錄,則 Jenkins 會提示:用戶沒有 Overall/read 權限。
Project roles
- Role to add:要添加的角色,相當於一個組名。
- Pattern:匹配的規則,支持正則表達式。比如:
- test_.*:表示以 test_開頭的所有項目。
- (?i):表示大小寫不敏感,如 (?i)roger-.* 可以匹配 Roger-.* 和 roger-.*。
- ^foo/bar.*:用來匹配文件夾。
- |:匹配多個,比如 abc|bcd|efg”直接匹配多個項目。
單擊 Add 添加完成后,再分配權限:
Assign Roles
將定義好的規則分配給具體的用戶。在 Manage Roles 只是對不同的角色分配了不同的權限,這一步是將這個權限和具體的用戶匹配起來。
單擊 Assign Roles,進入之后可以看到有兩個和 Manage Roles 對應的配置項:Global roles 和 Item roles。
global roles
Item roles
- 將 dev 規則分配給用戶 kongsh,也就是只有對 pipe 開頭的項目的讀權限。
- 將 test 規則分配給用戶 test,也就是對所有以 test_ 開頭的項目有 Build、Configure、Create、Read、Workspace 權限。
5)權限驗證
以 test 用戶登錄:
- 能看到所有以 test_ 開頭的項目,而且有執行權限:
以 kongsh 用戶登錄:
- 只能看到以 pipe 開頭的項目:
- 進入項目后,只有 read 的權限,沒有修改和執行的權限:
8. 使用視圖
默認情況下創建的項目都是在 Jenkins 首頁一個名為 ALL 的視圖中,當項目很多或者所有團隊共用一個 Jenkins 的話,想找到目標項目就會很吃力,要么使用瀏覽器自帶的搜索功能,要么使用 Jenkins 的搜索功能。這時我們就可以使用視圖來對項目進行分類管理。未使用視圖分類時的項目組織情況:
1)新建視圖
單擊左側的 New View 或者 All 后面的 + 號都可以用來創建視圖:
單擊后的配置頁面如下:
單擊確定后進入視圖配置頁面,如下:
勾選“使用正則表達式在視圖中顯示任務”,然后輸入正則表達式:test.*,表示所有以 test 開頭的項目,和正則表達式匹配的項目就會出現在此視圖中,如下:
如果不想使用正則表達式的話,也可以手動選擇指定的項目到此視圖中。
2)設置默認視圖
如果有多個視圖的話,可以把某一個設置為默認視圖,方法如下:
進入 Manage Jenkins-->Configure System 頁,下拉找到默認視圖配置項:
可以根據需要選擇默認的值。
9. 歸檔構建產物
這個是指將每次構建之后會在當前的工作空間中產生 war 包、jar 包、apk 或者一些日志文件等二進制文件展示到項目的構建首頁中,方便需要時下載或者查看。Jenkins 提供了 Archive the Artifacts 的插件以滿足以上要求。
在項目中構建后操作配置中選擇 Archive the Artifacts:
Archive the artifacts 配置中,輸入歸檔產物的目錄。
構建后在項目首頁看到的結果:
10. Jenkins 使用小技巧
1)查看幫助信息
點擊右側的藍色問號,這是 Jenkins 的上下文幫助按鈕,可以查看詳細的幫助信息。
2)變量的使用
內置環境變量可以在配置 Jenkins Job 的時候用得到,也可以用在 Execute shell、Execute Windows batch command、文本框等加上編輯好的 shell 腳本。
- Windows:%BUILD_NUMBER% %變量名%
- Linux:${BUILD_NUMBER} ,也可以直接使用 $BUILD_NUMBER
自己定義的參數化(Parameter)在調用時可以直接用 $參數名,比如調用這個時直接 $endPoint。
在 Maven 中使用(參考 Jenkins 內置環境變量的使用):
- Maven:直接使用:${env.WORKSPACE}
- Ant:需要增加 <property environment="env"/> 節點,再使用 ${env.WORKSPACE}
3)工作空間
在 Jenkins 節點機器的運行目錄為:C:\Users\G\.Jenkins\workspace\項目名,如果 Jenkins 的任務上沒有用 github 方式拉取代碼,而是直接構建運行代碼的話,所有運行 job 不會自動在 Jenkins 機器上創建當前這個 Jenkins job 名稱的文件夾路徑。
4)永久解決 HTML 文件樣式丟失的問題
Jenkins 為了避免受到惡意 HTML/JS 文件的攻擊,默認的配置下只允許加載 Jenkins 服務器上托管的 CSS 文件和圖片文件 。 默認的安全策略 CSP 設置為 :sandbox; default-src 'none'; img-src 'self'; style-src 'self';
也有一種解決方法是在 Jenkins 的腳本命令行執行一條關閉默認的設置。但是這種方法的缺點就是 Jenkins 關閉之后就會失效,必須重新執行一次該命令。本節介紹一種永久性的解決方法,即使 Jenkins 重啟也不用擔心。
需要提前安裝好以下 2 個插件:
- Startup Trigger:用來在 Jenkins 節點(master/slave)啟動時觸發構建。
- Groovy:用來在項目構建步驟中直接執行 Groovy 代碼。
新建一個自由風格的項目,在構建觸發器選項中選中 Build when job nodes start:
在構建步驟中選擇 Execute Groovy script,輸入以下命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","script-src 'unsafe-inline'")
保存即可。相當於把腳本的執行集成在項目中,這樣就不用擔心 Jenkins 重啟了。
5)忘記管理員密碼
如果不小心忘記了管理員密碼,我們該怎么辦呢?過程如下:
5.1)修改<passwordHash>
進入到 C:\Users\kongsh\.Jenkins\users\admin 目錄下,打開 config.xml 文件,找到 <passwordHash> 所在的行,如下:
將其替換為一個已知密碼的值,比如:<passwordHash>#jbcrypt:$2a$10$eJAMBW3qb/ijrFsSxkJnDOB747e0mFWSR03UmLCn96E4N7vL5BYzC</passwordHash>,這樣密碼就會被重置為 123456。
5.2)重啟 Jenkins 服務
5.3)進入瀏覽器界面修改新的管理員密碼
Manage Jenkins → Manage Users → admin 右側設置齒輪圖標,設置新的管理員密碼,應用、保存即可。