영상을 불러오지 못했습니다

TeamCity 환경 변수와 buildAgent.properties 우선순위

575 단어
3 분
TeamCity 환경 변수와 buildAgent.properties 우선순위

TeamCity agent마다 다른 값을 넣으려고 buildAgent.properties를 수정했다. 그런데 빌드에서는 모든 agent가 같은 값을 받았다.

문제 현상#

agent 설정에는 machine별 값이 있었다.

env.TOOLCHAIN_ROOT=/opt/toolchains/agent-specific

build step에서 %env.TOOLCHAIN_ROOT% 값을 출력했다. 결과는 TeamCity Web UI의 프로젝트 수준에 등록된 값으로 고정돼 있었다.

적용 범위#

agent configuration parameter와 project/build configuration parameter를 함께 쓰는 TeamCity 구성에 해당한다. env. parameter를 섞어 쓸 때도 같은 우선순위를 확인해야 한다.

원인#

같은 이름의 parameter가 여러 수준에 정의돼 있었다. TeamCity는 빌드 구성에 더 가까운 project/build parameter를 agent의 값보다 우선 적용했다. buildAgent.properties를 읽었지만 higher-priority definition이 그 값을 가렸다.

재현 및 진단#

  1. 실패한 build의 Parameters 탭에서 최종 resolved value와 source를 확인한다.
  2. build configuration, template, project와 parent project에서 같은 이름을 찾아본다.
  3. agent의 buildAgent.properties에서 env.와 system. 접두사가 올바른지 살핀다.
  4. agent 재시작 또는 configuration reload 뒤 agent Parameters 화면에 값이 보이는지 점검한다.

해결 방법#

agent마다 달라야 하는 값은 project에 정의된 같은 이름의 parameter를 지운 뒤 agent 값을 쓴다. 프로젝트에서 논리적 이름을 유지하려면 agent마다 고유한 configuration parameter를 두고 build parameter가 이를 참조하도록 매핑한다.

buildAgent.properties
agent.toolchain.root=/opt/toolchains/agent-specific
# TeamCity build parameter
env.TOOLCHAIN_ROOT = %agent.toolchain.root%

agent requirement도 함께 설정한다. 필요한 capability나 값이 없는 agent에는 build가 배정되지 않도록 한다.

검증 방법#

  • 서로 다른 두 agent에서 parameter source와 최종 환경 변수를 나란히 비교한다.
  • build log에는 secret이 아닌 값만 골라 출력한다.
  • template을 상속하는 build configuration도 동일하게 해석되는지 살핀다.
  • agent requirement가 값이 없는 agent를 실제로 제외하는지 별도로 시험한다.

주의점#

TeamCity의 password parameter나 token은 일반 환경 변수로 출력해서 검증하지 않는다. 운영체제 환경 변수, Java system property와 TeamCity configuration parameter는 이름이 비슷해도 주입 경로가 다르다. 접두사와 최종 build parameter 화면을 기준으로 구분한다.

참고 자료#

글 공유하기

이 글이 도움이 되셨다면 다른 사람과 공유해 주세요!

TeamCity 환경 변수와 buildAgent.properties 우선순위
https://hon454.github.io/posts/teamcity-buildagent-environment-variable-precedence/
작성자
Jihoon Jeon
게시일
2023-03-31
라이선스
CC BY-NC-SA 4.0
관련 게시글스마트
1
Hermes Agent로 중고 판매글 끌어올리고 판매 완료까지 마무리하기
개발 이야기중고 판매글을 올린 뒤에는 에이전트 없이 도는 크론으로 매일 한 번 끌어올리고, 번개장터에서 22만원에 판매가 끝난 뒤에는 같은 물건의 중고나라 글을 이중 판매 전에 정리하게 만든 과정이다. 플랫폼별 끌어올리기 규칙, 글마다 시각을 흩뜨리는 방식, 판매 후 장부 정리 순서를 PS4 Pro 판매 한 건으로 정리한다.
2
Firefly 업스트림 반영: 6.16.9
블로그Firefly 6.16.9와 이후 af8e98f까지의 모바일 메뉴 드로어, 날짜 타임존 처리, 음악 플레이어, MDX 이미지 그리드 변경과 의존성 업데이트.
3
Hermes Agent로 중고 판매글 작성부터 등록까지 자동화하기
개발 이야기사진과 한 줄 요청을 Slack 스레드에 올리면 Hermes Agent의 Merchant 프로필이 시세를 조사해 제목·가격·본문 초안을 쓰고, 승인한 뒤에만 중고나라와 번개장터 폼을 채워 등록하게 만든 과정이다. 승인 게이트, 본문 사실의 출처 구분, 플랫폼별 스킬 분리를 PS4 Pro 판매 한 건으로 정리한다.
4
면접 오답노트: 말하지 못한 주요 개념, Net Relevancy
Unreal Engine면접에서 제대로 답하지 못한 Net Relevancy를 다시 정리한다. AActor::IsNetRelevantFor의 판정 순서와 문서와 다른 부분, Owner가 판정을 바꾸는 방식, 연관성을 잃고 되찾을 때 RelevantTimeout과 액터 파괴, BeginPlay, OnRep, RPC에 생기는 일, ForceNetRelevant와 Replication Graph, Iris에서의 주의점, Dormancy, Priority와의 차이를 다룬다.
5
게임잡 공고 알림에 즐겨찾기 추가하기
개발 이야기매일 Slack으로 받는 게임잡 공고 목록에 즐겨찾기를 붙인 과정이다. 저장 위치와 표시 규칙, 대충 말한 공고를 에이전트가 찾아 등록하는 역할 분담, 신규 표시를 건드리지 않는 재전송 크론을 정리하고, 같은 날 점검에서 찾은 필터 오탐 수정을 적는다.
무작위 게시글무작위

댓글

Profile Image of the Author
Jihoon Jeon
안녕하세요! 서브컬처와 자전거를 사랑하는 개발자 전지훈입니다.
공지사항
제 블로그에 오신 것을 환영합니다! 예시 공지입니다.
카테고리
태그
최신 일상
사이트 통계
게시글
73
카테고리
10
태그
143
총 단어 수
133,527
운영 일수
0일
최근 활동
0일 전
사이트 정보
빌드 플랫폼
GitHub Actions
블로그 버전
Firefly v6.16.9
라이선스
CC BY-NC-SA 4.0
목차