호드가 에이전트와 통신하는 메커니즘은 Google의 Remote Worker API에 크게 의존합니다. 에이전트에 할당된 작업 항목을 리스라고 합니다.
에이전트와 서버 간의 통신은 에이전트에서 개시되는 스트리밍 gRPC 호출을 통해 이루어집니다. 연결이 종료되면 에이전트가 소유한 리스의 현재 상태로 간주되는 것의 사본을 교환하며, 스테이트 머신이 서로 다른 시간에 어떤 필드에 권한이 있는지 결정합니다. 서버와 에이전트는 서로 동기화될 때까지 계속해서 상태 오브젝트를 교환하고 차이를 조정합니다. 해당 시점에 에이전트는 서버에서 추가된 새 리스를 수락하고 있다는 것을 확인했으며, 서버는 에이전트에서 리스 제거가 완료되었다는 것을 확인했습니다.
호드 서버 내에서 리스는 ITaskSource 를 구현하는 클래스를 통해 에이전트에 할당됩니다.
리스 타입
각 리스 타입은 다음 키 클래스로 구성됩니다.
- 리스 자체를 정의하는 메시지(즉, 에이전트가 해야 하는 작업)
- 리스를 에이전트에 할당하기로 결정하는 서버의 작업 소스(
ITaskSource) - 작업을 수행하는 에이전트의 리스 핸들러(
LeaseHandler)
호드에는 다음과 같은 리스 타입이 제공됩니다.
| 메시지 | 작업 소스(서버) | 리스 핸들러(에이전트) | 설명 |
|---|---|---|---|
job_task.proto |
JobTaskSource |
JobHandler |
배치를 CI 작업의 일부로 실행합니다. |
upgrade_task.proto |
UpgradeTaskSource |
UpgradeHandler |
호드 에이전트 소프트웨어를 새로운 버전으로 업그레이드합니다. |
conform_task.proto |
ConformTaskSource |
ConformHandler |
머신의 모든 워크스페이스를 최신 상태로 동기화하고 트래킹되지 않은 파일을 선택적으로 제거합니다. |
restart_task.proto |
RestartTaskSource |
RestartHandler |
머신을 재시작합니다. |
shutdown_task.proto |
ShutdownTaskSource |
ShutdownHandler |
머신의 전원을 끕니다. |
새 리스 타입 추가하기
새 리스 타입을 추가하려면 위의 각 키 클래스를 추가해야 합니다.
- 서버에 작업 소스를 추가한 후
Startup.cs에서ITaskSource를 구현하는 싱글톤으로 등록합니다. - 에이전트에 리스 핸들러를 추가한 후
Program.cs에서LeaseHandler를 구현하는 싱글톤으로 등록합니다.