﻿# 如何建立與刪除 Azure DevOps 上面的 Project Wiki 文件庫

在 Azure DevOps Service 上面的 Wiki 有兩種類型，一種是隨著專案一起建立的 **Project Wiki** 文件庫，另一種是隨著 Git Repo 特定分支的 **Code Wiki** 文件庫。然而 **Project Wiki** 一個專案只能有一個，而且建立之後預設是無法刪除的，無論透過 Web UI 或是 Azure CLI 都沒辦法。今天這篇文章我要來說明如何透過 Azure DevOps REST API 來刪除專案的 Project Wiki 文件庫。

### 使用 Azure CLI 與 Azure DevOps Service 的 PAT 登入

1.  安裝 [Azure CLI](https://learn.microsoft.com/zh-tw/cli/azure/install-azure-cli) 命令列工具
    
    **Windows**
    
    ```powershell
    choco install azure-cli -y
    ```
    
    **Linux (Ubuntu/Debian)**
    
    ```bash
    curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
    ```
    
    **Linux (RHEL 7.7, RHEL 8, Fedora 24 and higher, CentOS 7 and CentOS 8)**
    
    ```bash
    sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
    
    echo -e "[azure-cli]
    name=Azure CLI
    baseurl=https://packages.microsoft.com/yumrepos/azure-cli
    enabled=1
    gpgcheck=1
    gpgkey=https://packages.microsoft.com/keys/microsoft.asc" | sudo tee /etc/yum.repos.d/azure-cli.repo
    
    sudo dnf install azure-cli
    ```
    
2.  加入 Azure DevOps 延伸模組
    
    ```bash
    az extension add --name azure-devops
    
    az extension show --name azure-devops
    ```
    
3.  執行 az devops login 以登入
    
    ```bash
    az devops login --org https://dev.azure.com/willh
    Token: {{PAT}}
    ```
    
    > 參考文件：[使用個人存取權杖登入 (PAT)](https://learn.microsoft.com/zh-tw/azure/devops/cli/log-in-via-pat?view=azure-devops&WT.mc_id=DT-MVP-4015686&tabs=windows) 與 [建立個人存取權杖指南](https://learn.microsoft.com/zh-tw/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops#create-a-pat)
    
4.  設定組織與專案預設值
    
    ```bash
    az devops configure --defaults organization=https://dev.azure.com/willh project=AppForK8S
    az devops configure -l
    ```
    
    > 如果預設值設定 `organization` 與 `project` 的話，之後的 `--org` 與 `--project` 參數都不需要輸入了！
    

### 建立 Wiki 文件庫

1.  使用 Web UI 建立 Wiki 文件庫
    
    ![建立 Wiki 文件庫](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/af2c98106298736451b1-123520114-b229c680-d6e1-11eb-817f-a6e55cd872e2.png)
    
    你只要滑鼠點擊 **Create project wiki** 按鈕，這個 **Project Wiki** 文件庫就會立刻建立完畢，而且也**無法刪除**！🔥
    
    如果點擊 **Publish code as wiki** 的話，還要另外設定你要從哪個 Repo、哪個 Branch、哪個 Path 下發布 Wiki 文件。預設他會將所有 `*.md` 檔案自動變成 Wiki 文件。
    
2.  使用 Azure CLI 建立 **Project Wiki** 文件庫
    
    ```bash
    az devops wiki create --org https://dev.azure.com/willh --project AppForK8S --type projectwiki --name AppForK8S.wiki
    ```
    
    > 你**不能**在一個專案下建立**兩個以上**的 **Project Wiki**
    
3.  使用 Azure CLI 建立 **Code Wiki** 文件庫
    
    建立 **Code Wiki** 文件庫必須透過 `--repository` 指定 Git Repo 的名稱，以及透過 `--version` 設定哪個分支的文件要發布上來，而 `--mapped-path` 則是指定 Git Repo 的指定分支下的哪個資料夾要發布 Wiki 文件。
    
    ```bash
    az devops wiki create --org https://dev.azure.com/willh --project AppForK8S --type codewiki --name AppForK8S_master --repository AppForK8S --version master --mapped-path /
    ```
    
4.  使用 Azure CLI 列出**特定專案**下的所有文件庫
    
    ```bash
    az devops wiki list --org https://dev.azure.com/willh --project AppForK8S
    ```
    
    ```
    ID                                    Name              Type
    ------------------------------------  ----------------  -----------
    69d8c99d-0b7e-46e3-ae4b-d6b5cab4a462  AppForK8S_master  codeWiki
    19324062-7664-453f-9def-6e94e1500de7  WILL.wiki         projectWiki
    ```
    

### 刪除 Wiki 文件庫

1.  使用 Azure CLI 刪除 **Code Wiki** 文件庫
    
    ```bash
    az devops wiki delete --org https://dev.azure.com/willh --project AppForK8S --wiki AppForK8S_master --yes
    ```
    
2.  使用 Azure DevOps REST API 刪除 **Project Wiki** 文件庫
    
    Azure DevOps REST APIs 支援用 **PAT** 與 **Basic Auth** (基本驗證) 進行驗證，雖然大多數 API 都可以成功呼叫，但是對於安全性較高的資源 (如: 組織、個人資料)，還是必須改用 **OAuth** 驗證取得 Token 才能操作。
    
    你可以使用 cURL 搭配 `--user USER:PASSWORD` 參數，就可以輕鬆完成 Basic Auth 輸入，並且搭配 `-X DELETE` 只訂用 DELETE Verb 來刪除資源。不過前提是你要先知道 **Project Wiki** 的 ID 為何！
    
    ```bash
    curl --user ':PAT' -X DELETE  https://dev.azure.com/willh/AppForK8S/_apis/git/repositories/19324062-7664-453f-9def-6e94e1500de7?api-version=5.1
    ```
    
    從上述網址你應該可以發現，這個 API 事實上是刪除一個 Git 儲存庫(Repo)，而不是刪除一個 Wiki 文件庫，這是因為 `projectWiki` 會自動建立一個你無法存取的 Git 儲存庫(Repo)，當你對 Wiki 任何文件做出編輯，都會直接轉成 `git commit` 到這個隱藏的 Repo 中，因此你才能在 Wiki 頁面看到版本資訊或 Diff 等功能。因此，你在刪除 **Project Wiki** 的時候，其實是刪除一個 Web UI 看不到的 Git 儲存庫(Repo)，同樣的命令一樣可以用來刪除你其他的 Git 儲存庫(Repo)！
    
    > 請注意，這裡的 `19324062-7664-453f-9def-6e94e1500de7` 就是你用 `az devops wiki list` 查出來的 `ID` 值！
    

### 相關連結

-   [Azure DevOps CLI 入門](https://learn.microsoft.com/zh-tw/azure/devops/cli/?view=azure-devops&WT.mc_id=DT-MVP-4015686)
-   [Azure DevOps Services REST API Reference](https://learn.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-6.1&viewFallbackFrom=azure-devops&WT.mc_id=DT-MVP-4015686)
-   Microsoft Docs
    -   [使用個人存取權杖登入 (PAT)](https://learn.microsoft.com/zh-tw/azure/devops/cli/log-in-via-pat?view=azure-devops&WT.mc_id=DT-MVP-4015686&tabs=windows)
    -   [Wikis - List - REST API (Azure DevOps Wiki)](https://learn.microsoft.com/en-us/rest/api/azure/devops/wiki/wikis/list?view=azure-devops-rest-5.1&WT.mc_id=DT-MVP-4015686)
    -   [Wikis - Create - REST API (Azure DevOps Wiki)](https://learn.microsoft.com/en-us/rest/api/azure/devops/wiki/wikis/create?view=azure-devops-rest-5.1&WT.mc_id=DT-MVP-4015686)
    -   [Wikis - Delete - REST API (Azure DevOps Wiki)](https://learn.microsoft.com/en-us/rest/api/azure/devops/wiki/wikis/delete?view=azure-devops-rest-5.1&WT.mc_id=DT-MVP-4015686)
    -   [az devops](https://learn.microsoft.com/en-us/cli/azure/devops?view=azure-cli-latest&WT.mc_id=DT-MVP-4015686)
    -   [Create a project wiki to share information - Azure DevOps](https://learn.microsoft.com/en-us/azure/devops/project/wiki/wiki-create-repo?view=azure-devops&WT.mc_id=DT-MVP-4015686&tabs=browser)
    -   [Publish Markdown files from Git repository to wiki - Azure DevOps](https://learn.microsoft.com/en-us/azure/devops/project/wiki/publish-repo-to-wiki?view=azure-devops&WT.mc_id=DT-MVP-4015686&tabs=browser)
    -   [新增、編輯、重新排序、管理 wiki 頁面 - Azure DevOps](https://learn.microsoft.com/zh-tw/azure/devops/project/wiki/add-edit-wiki?view=azure-devops&WT.mc_id=DT-MVP-4015686&tabs=browser#delete-wiki-page)
-   [使用 Azure CLI 管理 Azure DevOps Services 服務](/post/2019/06/01/Manage-Azure-DevOps-Services-using-Azure-CLI)
-   [Call Azure DevOps REST API with Postman](https://sanderh.dev/call-Azure-DevOps-REST-API-Postman/)
-   [Delete default project Wiki in Azure DevOps](https://sanderh.dev/delete-project-wiki-Azure-DevOps/)
-   [\[Azure\] 如何使用 Postman 執行 Azure API by 2021 | 打雜工程師 Ryuk 的工具簿 - 點部落](https://www.dotblogs.com.tw/ryuk/2021/06/12/160703)
