---
# System prepended metadata

title: '[雲端] Jenkins'
tags: [雲端, Jenkins]

---

[雲端] Jenkins
===
###### tags: `雲端`, `Jenkins`

<br>

![](https://i.imgur.com/25RSr1D.png)

[TOC]

<br>

## 如何新增帳號，並賦予權限？
- Security / Manage Users
    ![](https://i.imgur.com/3OXlaMK.png)
    ---
    <img src="https://i.imgur.com/vJkNg49.png" style="border: 1px solid; ">
    ---
    <img src="https://i.imgur.com/ghZ17R9.png" style="border: 1px solid; ">
    
    - 權限採用 union (聯集)
        當一個帳號擁有多個角色，若某個功能需要權限，會去各角色詢問

<br>

## 權限(Permissions)
### [權限] ==權限的通則(非常重要)==
1. ### 角色差別
    - 「全域角色」就是根目錄 (例如：```麵包屑: Jenkins/```)
    - 「資料夾角色」就是子目錄 (例如：```麵包屑: Jenkins/tj_folder```)
        - tj_folder 亦視為「資料夾角色」的根目錄
    - 兩者差別是：
        - 「全域角色」比「資料夾角色」多了 ==**Agent**== 和 ==**Overall**== 類別權限
            ([下一節](#權限-全域角色的權限-vs-資料夾角色的權限)有列舉對照)
2. ### 權限相對關係
    - **某一層**擁有的**權限**為：
        - 上層、或更上層的所有權限集合(**聯集**)
    - **上層**要前往**下層**子目錄，上層要先有權限
        - 例如：
            ```jenkins(根目錄)/tj_folder(folder角色根目錄)/A/B/C```
            - 要存取C，需要 jenkins 層授予 job_read
                或是 tj_folder 授予 job_read
                才能繼續往下層存取
            - 若上層未授予權限，即使 C 擁有 folder 角色的全部權限，仍無法讀取
                ![](https://i.imgur.com/xTweLzi.png =50%x50%)
3. ### 權限所產生的物件所屬關係
    - **某一層** 擁有的**物件**為：
        - 上層、或更上層的所有物件集合(**聯集**)


<br>

### [權限] ==全域角色的權限 v.s. 資料夾角色的權限==
> 「全域角色」比「資料夾角色」多了 Agent 和 Overall 類別權限

| global-permission<br>全域角色的權限<br>(根目錄資料夾) | folder-permission<br>資料夾角色的權限<br>(子目錄資料夾) |
|----------------------------|----------------------------|
| Credentials/Create         | Credentials/Create         |
| Credentials/Delete         | Credentials/Delete         |
| Credentials/ManageDomains  | Credentials/ManageDomains  |
| Credentials/Update         | Credentials/Update         |
| Credentials/UseItem        | Credentials/UseItem        |
| Credentials/UseOwn         | Credentials/UseOwn         |
| Credentials/View           | Credentials/View           |
| Agent/Build                |                            |
| Agent/Configure            |                            |
| Agent/Connect              |                            |
| Agent/Create               |                            |
| Agent/Delete               |                            |
| Agent/Disconnect           |                            |
| Agent/ExtendedRead         |                            |
| Agent/Provision            |                            |
| Overall/Administer         |                            |
| Overall/Manage             |                            |
| Overall/Read               |                            |
| Overall/SystemRead         |                            |
| Job/Build                  | Job/Build                  |
| Job/Cancel                 | Job/Cancel                 |
| Job/Configure              | Job/Configure              |
| Job/Create                 | Job/Create                 |
| Job/Delete                 | Job/Delete                 |
| Job/Discover               | Job/Discover               |
| Job/ExtendedRead           | Job/ExtendedRead           |
| Job/Move                   | Job/Move                   |
| Job/Read                   | Job/Read                   |
| Job/WipeOut                | Job/WipeOut                |
| Job/Workspace              | Job/Workspace              |
| Run/Artifacts              | Run/Artifacts              |
| Run/Delete                 | Run/Delete                 |
| Run/Replay                 | Run/Replay                 |
| Run/Update                 | Run/Update                 |
| View/Configure             | View/Configure             |
| View/Create                | View/Create                |
| View/Delete                | View/Delete                |
| View/Read                  | View/Read                  |
| SCM/Tag                    | SCM/Tag                    |
| Lockable Resources/Reserve | Lockable Resources/Reserve |
| Lockable Resources/Unlock  | Lockable Resources/Unlock  |
| Lockable Resources/View    | Lockable Resources/View    |

<br>

### [權限] ==如何查閱需要什麼權限？==
- ### 方法一：UI 會直接顯示「缺少 XXX 權限」
    ![](https://i.imgur.com/QMqG2KU.png)
    上面的圖顯示：缺少 ```Credentials/View``` 權限
    http://10.78.26.241:58080/credentials/
- ### 方法二：從 URL 判斷
    底下這個 URL
    http://10.78.26.241:58080/++job++/tj_folder3/
    就可以推斷跟 job 有關的權限
    要能 read ，權限應該會是 Job/Read
- ### 方法三：分上半部 / 下半部，進行二分搜尋 (暴力法)
    - 對所有的權限分兩半搜尋
        - 上半部全打勾
        - 下半部全取消
    - 如果還是有 Access Denied，表示所需的權限位於下半部
    - 反覆進行，就可以找到對應的權限 :+1: 
    
<br>

<hr>

<br>

## 憑證(Credentials)
### [憑證] ==倉庫架構==
- #### store 就是用於儲存物件的地方，比如儲放憑證
    - Jenkins 就是一個 store
    - 每個帳戶(使用者) 也擁有自身的 store
- #### domain 為領域
    - 簡單講就是：用來建立「類別」，分門別類

<br>

<table>
    <thead>
        <tr>
            <th>store (憑證倉庫)</th>
            <th>domain (領域)</th>
            <th> 補充說明</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Jenkins<br>(就是根目錄)</td>
            <td>(global) (預設領域)<br>可額外建立其他領域<br>底下以此類推</td>
            <td>User 可在  Source Code Management 資訊看到全部</td>
        </tr>
        <tr>
            <td>Jenkins/tj_folder/A/B<br>(子目錄範例)</td>
            <td>(global)</td>
            <td>User 可在  Source Code Management 資訊看到該層以上的憑證，但不包含其子層</td>
        </tr>
        <tr>
            <td>User:tj_tsai1</td>
            <td>(global)</td>
            <td>admin 看不到</td>
        </tr>
        <tr>
            <td>User:tj_tsai2</td>
            <td>(global)</td>
            <td>admin 看不到</td>
        </tr>
        <tr>
            <td rowspan=3>User:tj_tsai3</td>
            <td>(global)</td>
            <td>admin 看不到</td>
        </tr>
        <tr>
            <td>tj_tsai3__subdomain1</td>
            <td>admin 看不到</td>
        </tr>
        <tr>
            <td>tj_tsai3__subdomain2</td>
            <td>admin 看不到</td>
        </tr>
        <tr>
            <td colspan=3></td>
        </tr>
        <tr>
            <td>User:tj_tsai3 示意圖<br><img src="https://i.imgur.com/F5XqJLD.png"></td>
            <td><br><img src="https://i.imgur.com/xZctJWP.png">
</td>
            <td>admin 看不到</td>
        </tr>
        <tr>
            <td colspan=3><img src="https://i.imgur.com/KWli72D.png">
</td>
        </tr>
    </tbody>
</table>

<br>

### [憑證] ==各階層的憑證視野==
- 根據前面的權限通則
    - 權限所產生的物件所屬關係
        **某一層** 擁有的物件為：上層、或更上層的所有物件集合(聯集)
- #### 位於 ```Jenkins/tj_folder/A/B``` 看到的憑證
    ![](https://i.imgur.com/8xCfzIw.png)
    - 看不到 C 層(子層)的憑證，但可以看到該層以上的憑證，包括
        - Jenkins 層 ( global 層)
        - tj_folder 層
        - A 層 
            (即使 A 層完全沒有指派任何權限，也可以看到)
            (因為根目錄層已經有指派 Job/Read 權限)
- #### ```位於 Jenkins/tj_folder/A/B/C``` 看到的憑證
    ![](https://i.imgur.com/U8ylw7v.png)
    - 可以看到該層以上的憑證，包括
        - Jenkins 層 ( global 層)
        - tj_folder 層
        - A 層
        - B 層

<br>

### [憑證] ==admin 帳戶，可看到哪些憑證？==
- ### 查看全域＆用戶的憑證
    - Jenkins (位於最頂層) / 從 [側欄] Manage Jenkins 進入 / 再點選 Manage Credentials
        [![](https://i.imgur.com/unmMQXz.png)](https://i.imgur.com/unmMQXz.png)
        <br>
    - 查看 Credentials 資訊
        [![](https://i.imgur.com/abdG4c3.png)](https://i.imgur.com/abdG4c3.png)
        - 只能看到全域的憑證
        - 看不到用戶的憑證
        - 看不到 folder-based 的憑證(有其他方法可看到，見底下)
    <br>
- ### 查看其他用戶的憑證 / 從 People 進入 / 再點選某個用戶
    - Jenkins (位於最頂層) / 從 People 進入
        [![](https://i.imgur.com/m88L2XX.png)](https://i.imgur.com/m88L2XX.png)
        <br>
    - 再點選 Configure，查看 Credentials 資訊
        [![](https://i.imgur.com/8Lk2x3s.png)](https://i.imgur.com/8Lk2x3s.png)
        - Credentials are only available to the user they belong to
            看不到該用戶的憑證
        <br>
- ### 查看其他帳戶的憑證 / 從 folder 進入
    - Jenkins (位於最頂層) / 從 [folder-based] Name 進入
        [![](https://i.imgur.com/tYfIFxp.png)](https://i.imgur.com/tYfIFxp.png)
        <br>
    - 一路點進去到 project / 再從 [側欄] Configure 進入
        [![](https://i.imgur.com/J6xEjbG.png)](https://i.imgur.com/J6xEjbG.png)
        <br>
    - 查看 Source Code Management 資訊
        [![](https://i.imgur.com/ugwhrn6.png)](https://i.imgur.com/ugwhrn6.png)
        <br>
    - 亦可從 [側欄]Credentials 進入
        [![](https://i.imgur.com/0JhnBAZ.png)](https://i.imgur.com/0JhnBAZ.png)

<br>

### [憑證] ==一般帳戶，可看到哪些憑證？==
- Jenkins (根目錄) 的全域憑證
- Folder (Jenkins的子目錄; 資料夾角色的根目錄) 的憑證
    (決取於根目錄是否有指派 Job/Read 權限)
- 自身的憑證

<br>

<hr>

<br>

## 專案(Projects)
### [專案] ==如何建立一個新專案？==
- #### 點選 New Item
    ![](https://i.imgur.com/9ul4670.png)
- #### 點選 Freestyle project，然後按 OK
    ![](https://i.imgur.com/HeiE6o8.png)

<br>

### [專案] ==如何透過憑證取得 gitlab / github 的原始碼？==
- #### 使用 Docker Image 安裝 GitLab，可參考 [此篇](/IarR3jEoRw-d5DthZMGl-Q)
- #### 在 gitlab / github 上先開一個專案，並準備一支 shell script 供測試
    - ```run.sh```
        ```shell
        pwd
        date
        date +%T
        ```
- #### 在專案 config 的 Source Code Management 裡
    - 填寫 git clone 的 URL
        - 可在 project 右上方 Clone 按鈕查到
            ![](https://i.imgur.com/LFJEChj.png)
            <br>
    - 選擇憑證(帳號&密碼)
    - 如下所示
        ![](https://i.imgur.com/GJ3Abgo.png)
        
        :::success
        :information_source: **如果 project 是 public，任意選憑證 都可以過**
        :::
        
        :::warning
        :warning: **不正確的「 URL 」，會有錯誤訊息：unable to access**
        如：port 不正確，把 80 寫成 8080
        ![](https://i.imgur.com/H4fUD5t.png)
        :::
        
        :::warning
        :warning: **不正確的「憑證」，會有錯誤訊息：Access denied**
        如：帳號密碼給錯
        ![](https://i.imgur.com/xHBN3lB.png)
        :::
        
        :::info
        :information_source: **手動自行測試**
        - public 的專案，不會提示要輸入帳密
            ```bash
            $ git ls-remote -h http://10.78.26.241:50080/tj_tsai3/tj3-jenkins-project1-public.git HEAD
            ```
        - private 的專案，會提示要輸入帳密，帳密為 ```tj_tsai3/tj_tsai3```
            ```bash
            $ git ls-remote -h http://10.78.26.241:50080/tj_tsai3/tj3-jenkins-project2-private.git HEAD
            ```
        :::
- #### 選擇 Build 方式
    ![](https://i.imgur.com/dEaMnSN.png)
    ---
    並填上啟動指令 (就跟 docker 一樣，總是會有一個入口點)
    ```bash
    sh run.sh
    ```
    ![](https://i.imgur.com/wN0B5F0.png)
- #### 啟動 Build
    <img src="https://i.imgur.com/1RcOrs9.png" style="border: 1px solid; ">
    
    ---
    
    #### 查閱這次 Build 的結果：
    <a href="https://i.imgur.com/tinOX6r.png" target="_blank"><img src="https://i.imgur.com/tinOX6r.png" style="border: 1px solid; "></a><br>
     <a href="https://i.imgur.com/4fgWz7o.png" target="_blank"><img src="https://i.imgur.com/4fgWz7o.png" style="border: 1px solid; "></a>
    :+1: :100: 


<br>

<hr>

<br>

## 語言設定
- ### Manage Jenkins / [System Configuration] Configure System
    - en_us / zh_US (不分大小寫)
    - zh_tw / zh_TW (不分大小寫)
        ![](https://i.imgur.com/8DvjGTC.png)

<br>

<hr>

<br>

## 參考資料：中文界面部份對照
### Manage Jenkins
[![](https://i.imgur.com/nDTWMOe.png)](https://i.imgur.com/nDTWMOe.png)

### Manage Jenkins / [System Configuration] Configure System
[![](https://i.imgur.com/0oqHOHS.png)](https://i.imgur.com/0oqHOHS.png)
