Perforce
일반
호드는 주로 CI 기능에 Perforce를 사용하지만, Perforce 서버에서 바로 환경설정 데이터를 읽는 기능도 지원합니다(환경설정 > 오리엔테이션 참고).
환경설정 파일을 읽기 위해 사용하는 Perforce 연결은 서버 Server.json 파일의 perforce 프로퍼티를 통해 서버 디플로이와 함께 환경설정합니다.
향후 다른 버전 관리 시스템에 대한 지원이 추가될 수 있습니다.
클러스터
에픽의 Perforce 디플로이는 상당히 정교하며, 여러 지역 및 데이터 센터에 걸쳐 CI 빌드 인프라를 확장하고자 한 결과, Perforce 에지 서버와의 상호작용을 위한 수많은 커스텀 기능을 통해 호드를 강화할 수 있었습니다. 호드는 Perforce 서버에 빌드 에이전트를 연결하기 위해 로드 밸런서를 구현합니다. 로드 밸런서는 예컨대 서버에서 문제가 보고되면 서버 인스턴스에 제공된 상태 확인 데이터를 사용하여 새 서버 인스턴스로 롤오버합니다.
호드는 각 설치 내 여러 미러에서 여러 독립적 Perforce 설치 및 로드 분산 사용을 지원합니다. 동일한 데이터를 미러링하는 Perforce 서버 컬렉션을 클러스터라고 합니다. 원하는 경우 CI 시스템의 각 스트림이 서로 다른 클러스터를 사용하도록 환경설정할 수 있습니다.
클러스터는 globals.json 환경설정 파일의 perforceClusters 프로퍼티를 통해 환경설정됩니다.
각 클러스터에는 다음과 같은 환경설정 가능한 요소가 있습니다.
Name: CI 시스템의 스트림에서 클러스터를 참조하는 데 사용됩니다.Servers: 각 서버는 다음과 같은 자체 세팅을 지원합니다.ServerAndPort: 서버 포트는 여러 기록이 있는 DNS 항목일 수 있으며, 이 경우 로드가 능동적으로 분산됩니다.ResolveDns: true인 경우 사용될 서버의 구체적인 목록을 찾기 위해 주어진 DNS 이름이 해석됩니다. 이를 통해 IT/인프라 팀이 호드를 다시 환경설정하지 않아도 클러스터에 서버를 추가하거나 클러스터에서 서버를 제거할 수 있습니다.Properties: 에이전트가 이 서버를 선택하기 위해 보유해야 하는 프로퍼티를 지정합니다.HealthCheck: true인 경우 호드 서버는 잘 알려진 엔드포인트에서 상태를 위해 서버를 주기적으로 폴링합니다. 자세한 내용은 상태 확인을 참고하세요.
Credentials: 이 서버에 있는 여러 계정의 사용자 이름/비밀번호/티켓 목록입니다. CI 작업이 이러한 크리덴셜을 요청할 수 있습니다.ServiceAccount: 스트림에서 커밋 쿼리하기, 다른 사용자를 대신하여 제출하기 등 내부 작업을 위해 호드에서 사용해야 하는 계정 사용자 이름을 설정합니다.CanImpersonate: 프리플라이트(Preflight) 및 제출 작업에 성공한 후 변경사항을 제출할 때 호드가 다른 사용자로 가장하려고 시도해야 하는지 여부를 나타냅니다. 일반적으로 관리자 계정이 필요합니다.
SSL 사용 서버
Perforce 서버가 SSL을 사용하고 ssl: 접두사가 지정된 경우, 서버 지문 또는 인증서의 신뢰성을 보장하는 것이 필수적입니다. 자세한 내용은 p4 trust 문서를 참고하세요. 환경설정에 따라 P4TRUST 환경 변수를 명시적으로 설정해야 할 수 있으며, 이러한 환경 변수는 유효한 p4trust.txt 파일을 가리켜야 합니다. 자세한 내용은 마찬가지로 P4 문서를 참고하세요.
예를 들어 Windows에서 호드 서버는 기본적으로 서비스로 실행됩니다. 이 시나리오에서 신뢰하는 파일의 기본 위치는 %SystemRoot%\System32\config\systemprofile\p4trust.txt 로 해석됩니다.
상태 확인
활성화하는 경우 Perforce 서버의 상태 확인은 http://{{ PERFORCE_SERVER_URL }}:5000/healthcheck 에 대해 HTTP GET 요청을 수행하여 이루어집니다. 엔드포인트는 다음 구조의 JSON 문서를 반환할 것으로 예상됩니다.
{
"results": [
{
"checker": "edge_traffic_lights"
"output": "green"
}
]
}
output 의 유효한 값의 의미는 다음과 같습니다.
green: 서버가 정상입니다.yellow: 서버 퍼포먼스가 저하됩니다.red: 서버가 기존 연결을 끊고 있으므로 서버를 사용해서는 안 됩니다.
이 기능은 PerforceLoadBalancer.GetServerHealthAsync() 에서 구현됩니다.
P4CONFIG
호드는 CI 사용을 위해 생성된 워크스페이스의 부모 디렉터리에 적절한 Perforce 서버, 포트, 사용자 이름이 포함된 p4.ini 라는 파일을 생성합니다.
다음 명령을 실행하면 Perforce가 현재 디렉터리에서 워크스페이스에 대한 올바른 세팅을 자동으로 탐지하도록 할 수 있습니다.
p4 set P4CONFIG=p4.ini
Slack
호드는 다음 목적으로 Slack을 사용합니다.
- 환경설정 오류 및 CI 실패에 대한 알림을 브로드캐스트합니다.
- 호드에 로그인한 사용자에게 아바타를 제공합니다.
매니페스트
호드 Slack 앱은 다음 매니페스트를 사용하여 환경설정할 수 있습니다. 아래 {{ SERVER_URL }} 자리표시자를 참고하세요.
{
"display_information": {
"name": "Horde",
"description": "Allow for interaction with the Horde build system.",
"background_color": "#000000"
},
"features": {
"bot_user": {
"display_name": "Horde",
"always_online": false
}
},
"oauth_config": {
"scopes": {
"user": [
"admin.conversations:write"
],
"bot": [
"chat:write",
"chat:write.public",
"reactions:read",
"reactions:write",
"users.profile:read",
"users:read",
"users:read.email",
"channels:manage"
]
}
},
"settings": {
"interactivity": {
"is_enabled": true,
"request_url": "{{ SERVER URL }}/api/v1/slack"
},
"org_deploy_enabled": true,
"socket_mode_enabled": true,
"token_rotation_enabled": false
}
}
Horde/Horde.Server/Slack 아래의 소스 트리에서 적합한 애플리케이션 아이콘과 빌드 상태 알림 메시지에 사용할 수 있는 아이콘을 찾을 수 있습니다.
호드가 완전히 작동하려면 서버의 Server.json 파일에서 다음의 2가지 토큰을 환경설정해야 합니다.
SlackToken: 채널에 메시지를 게시하는 데 사용되는 봇 토큰입니다(접두사xoxb-있음). 호드 봇 사용자는 또한 게시해야 하는 채널에 명시적으로 초대되어야 합니다.SlackSocketToken: Slack에 WebSocket 연결을 열어, 버튼 누르기 등에 응답하는 인터랙티브 기능(접두사xapp-사용)을 제공하는 데 사용되는 토큰입니다.
사용자 매핑
호드 사용자는 사용자의 OIDC 프로파일에 있는 이메일 주소를 Slack 사용자 프로파일에 연결하여 Slack 사용자에 매핑됩니다. 이메일 주소가 성공적으로 매핑되는 경우 호드는 대시보드에서 Slack을 통해 환경설정된 아바타를 사용합니다.