Alpine Linux
3.13 和更新
版本 (
需要代理程式 3.227 或更高版本)
.NET
- 代理程式軟體會在 .NET 6 上執行,但會安裝自己的 .NET 版本,因此沒有 .NET 必要條件。
Subversion
- 如果您要從 Subversion 存放庫建置,則必須在電腦上安裝 Subversion 用戶端。
TFVC
- 如果您要從 TFVC 存放庫建置,請參閱
TFVC 必要條件
。
代理程式安裝程式知道如何檢查其他相依性。
您可以在代理程式目錄中執行
./bin/installdependencies.sh
,在支援的 Linux 平臺上安裝這些相依性。
請注意,.NET 所需的部分相依性是從第三方網站擷取,例如
packages.efficios.com
。 在執行
installdependencies.sh
腳本之前,請檢閱腳本,並確保能從您的Linux機器存取任何參考的第三方網站。
請也確保所有必要的存放庫都已經連結到
installdependencies.sh
中使用的相關套件管理工具(例如
apt
或
zypper
)。
對於相依性安裝的問題(例如「存放庫中找不到相依性」或「擷取存放庫索引檔時發生問題」)- 您可以聯絡發行者以取得進一步的支援。
您應該首次手動執行代理程式設定。
在您瞭解代理程式的運作方式,或想要自動設定許多代理程式之後,請考慮使用
無人值守設定
。
準備權限設定
設定代理程式的使用者需要集區管理員許可權,但執行代理程式的使用者則不需要。
代理程式所控制的資料夾應限制為盡可能少的使用者,因為它們包含可以解密或外洩的秘密。
Azure Pipelines 代理程式是一種軟體產品,其設計目的是執行從外部來源下載的程式碼。 它本質上可能是遠端程式代碼執行 (RCE) 攻擊的目標。
因此,請務必考慮每一次使用管線代理的威脅模型,以及針對不同的執行案例,決定授予負責執行代理的使用者的最低許可權、代理執行所在的機器、擁有管線定義寫入權限的使用者、存放 yaml 的 git 倉庫,及控制新管線集區存取權的使用者群組。
最佳做法是讓執行代理程式的身分識別與具有將代理程式連線到集區之許可權的身分識別不同。 產生認證的使用者(和其他代理程式相關檔案)與需要讀取認證的使用者不同。 因此,請務必仔細考慮對代理機器本身及包含敏感檔案(例如日誌和文件)的代理資料夾授予的存取權限。
只有 DevOps 系統管理員和執行代理程式的使用者身分識別,才可被授予代理程式資料夾的存取權。 系統管理員可能需要調查文件系統,以瞭解建置失敗,或取得記錄檔,才能回報 Azure DevOps 失敗。
決定要使用哪個用戶
作為一次性步驟,您需要註冊代理程式。 有權
管理代理程式佇列
的人員必須完成這些步驟。 代理人不會在日常運作中使用此人的認證,但需要完成註冊。
深入瞭解
代理程式如何通訊
。
確認使用者具有許可權
請確定您將使用的用戶帳戶具有註冊代理程序的許可權。
使用者是 Azure DevOps 組織擁有者或 TFS 或 Azure DevOps Server 系統管理員嗎?
停在這裡
,您有允許。
-
開啟瀏覽器並流覽至您的 Azure Pipelines 組織或 Azure DevOps Server 或 TFS 伺服器的
代理程式集
索引標籤:
-
登入您的組織(
https://dev.azure.com/{yourorganization}
)。
-
選取
[Azure DevOps
>
組織設定]。
-
選取頁面右側的池,然後點擊
安全性
。
-
如果未顯示您要使用的用戶帳戶,請讓系統管理員新增該帳戶。 系統管理員可以是代理程式集區管理員、
Azure DevOps 組織擁有者
,或是
TFS 或 Azure DevOps Server 系統管理員
。
如果是部署群組代理程序,系統管理員可以是部署群組
管理員、
Azure DevOps 組織擁有者
或
TFS 或 Azure DevOps Server 系統管理員
。
您可以在 Azure Pipelines
的 [部署群組
] 頁面
的
[安全性
] 索引卷標中
,將使用者新增至部署群組管理員角色。
如果您看到如下的訊息:
很抱歉,我們無法新增身分識別。請嘗試不同的身分識別。
您可能已針對組織擁有者或 TFS 或 Azure DevOps Server 系統管理員遵循上述步驟。 您不需要執行任何動作;您已有管理代理程式集區的許可權。
Azure Pipelines
-
使用您已備妥許可權的帳戶登入計算機,如上一節所述。
-
在您的網頁瀏覽器中,登入 Azure Pipelines,然後瀏覽至
代理程式集
索引標籤:
-
登入您的組織(
https://dev.azure.com/{yourorganization}
)。
-
選取
[Azure DevOps
>
組織設定]。
若要重新啟動代理程式,請按 Ctrl+C,然後執行
run.sh
以重新啟動它。
若要使用您的代理程式,請使用代理程式的集區執行
作業
。
如果您未選擇不同的集區,您的代理程式會放在
預設
集區中。
針對設定為以互動方式執行的代理程式,您可以選擇讓代理程式只接受一項作業。
若要在此組態中執行:
./run.sh --once
此模式中的代理程式僅接受一項作業後便會優雅地停止運行(適用於在 Azure 容器實例等服務中運行的 Docker )。
以系統服務身分執行
如果您的代理程式在這些作業系統上執行,您可以將代理程式作為systemd
服務來執行。
- Ubuntu 16 LTS 或更新版本
- Red Hat 7.1 或更新版
我們提供範例 ./svc.sh
腳本,讓您執行和管理代理程式即 systemd
服務。
此文稿會在您設定代理程序之後產生。
建議您先檢閱並視需要更新腳本,再執行腳本。
一些重要的注意事項:
- 如果您以服務身分執行代理程式,則無法以使用者身分
root
執行代理程序服務。
- 使用 SELinux 的用戶已回報遇到使用所提供
svc.sh
腳本的困難。
將此 代理程式問題 稱為起點。
SELinux 不是正式支持的組態。
如果您有不同的發行版或偏好其他方法,您可以使用任何您偏好的服務模式。 請參閱 服務檔案。
更改到代理目錄
例如,如果您安裝在主目錄的 myagent
子資料夾中:
cd ~/myagent$
sudo ./svc.sh install [username]
此命令會建立指向 ./runsvc.sh
的服務檔案。 此文稿會設定環境(以下更多詳細數據),並啟動代理程式主機。 如果未 username
指定參數,則用戶名稱取自 sudo 命令所設定的 $SUDO_USER 環境變數。 這個變數總是等於執行 sudo
命令的用戶名稱。
sudo ./svc.sh start
sudo ./svc.sh status
sudo ./svc.sh stop
卸載之前,您應該先停止。
sudo ./svc.sh uninstall
更新環境變數
當您設定服務時,它會為目前的登入使用者擷取一些實用的環境變數快照,例如PATH、LANG、JAVA_HOME、ANT_HOME和MYSQL_PATH。 如果您需要更新變數(例如,安裝一些新軟體之後):
./env.sh
sudo ./svc.sh stop
sudo ./svc.sh start
環境變數的快照集會儲存在 .env
代理程式根目錄下的檔案中(PATH
儲存在 .path
中),您也可以直接變更這些檔案以套用環境變數變更。
在服務啟動之前執行指示
您也可以執行自己的指示和命令,以在服務啟動時執行。 例如,您可以設定環境或呼叫腳本。
編輯 runsvc.sh
。
使用您的指示取代下列這一行:
# insert anything to setup env when running as a service
當您安裝服務時,會安裝並配置一些服務檔案。
systemd 服務檔案
服務 systemd
檔案已被建立。
/etc/systemd/system/vsts.agent.{tfs-name}.{agent-name}.service
例如,您已使用 名稱 our-linux-agent
設定代理程式(請參閱上圖)。 服務檔案可能是以下其中之一:
Azure Pipelines:您組織的名稱。 例如,如果您連接到 https://dev.azure.com/fabrikam
,則服務名稱會是 /etc/systemd/system/vsts.agent.fabrikam.our-linux-agent.service
TFS 或 Azure DevOps Server:內部部署伺服器的名稱。 例如,如果您連接到 http://our-server:8080/tfs
,則服務名稱會是 /etc/systemd/system/vsts.agent.our-server.our-linux-agent.service
sudo ./svc.sh install
從此範本產生此檔案:./bin/vsts.agent.service.template
.service 檔案
sudo ./svc.sh start
通過讀取 .service
檔案來尋找服務,該檔案包含上述 systemd 服務檔案的名稱。
替代服務機制
./svc.sh
我們提供腳本作為方便的方式,讓您以系統化服務身分執行和管理代理程式。 但是,您可以使用任何偏好的服務機制(例如:initd 或 upstart)。
您可以使用上述範本來協助產生其他類型的服務檔案。
使用 cgroup 來避免代理程序失敗
請務必避免代理程式失敗或變成無法使用的情況,否則代理程式無法將管線記錄或報告管線狀態串流回伺服器。 您可以通過使用 cgroups
和較低的 oom_score_adj
,減輕因高記憶體壓力造成此類問題的風險。 完成此動作之後,Linux 會先從管線作業進程回收系統記憶體,再從代理程式進程回收記憶體。
瞭解如何設定 cgroups
和 OOM 分數。
更換代理人
若要取代代理程式,請遵循 下載並再次設定代理程式 步驟。
當您使用與已經存在之代理程式相同的名稱來設定代理程式時,系統會詢問您是否要取代現有的代理程式。 如果您回答 Y
,請確定您移除要取代的代理程式(如下所示)。 否則,在幾分鐘的衝突之後,其中一個代理程式將會關閉。
若要移除代理程式:
停止並卸載服務,如上一節所述。
拿掉代理程式。
./config.sh remove
輸入您的認證。
拿掉代理程序之後,您可以 再次進行設定。
無人值守設定
您可以從腳本設定代理程式,而不需要人為介入。
您必須傳遞 --unattended
和所有問題的解答。
若要設定代理程式,它必須知道貴組織或集合的 URL,及已獲授權設定代理程式人士的認證。
所有其他回應都是選擇性的。
您可以使用環境變數來指定任何命令行參數:先將其名稱轉為大寫字母,然後在其前方加上VSTS_AGENT_INPUT_
。
例如, VSTS_AGENT_INPUT_PASSWORD
而不是指定 --password
。
--unattended
- 代理程式設定不會提示資訊,而且必須在命令行上提供所有設定
--url <url>
- 伺服器的 URL。 例如: https://dev.azure.com/myorganization 或 http://my-azure-devops-server:8080/tfs
--auth <type>
- 驗證類型。 有效值為:
pat
(個人存取令牌) - PAT 是與 Azure DevOps Services 搭配運作的唯一配置。
alt
(基本身份驗證)
- 如果您選擇
--auth pat
: