Notice
Recent Posts
Recent Comments
Link
반응형
«   2026/09   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

덕규의 아즈카반

JenkinsCI 공식 Repository에 오픈소스 기여해보기 본문

DevOps

JenkinsCI 공식 Repository에 오픈소스 기여해보기

frontheadlock 2026. 2. 27. 10:49
반응형

 

 

최근 컨테이너 기반의 CI 환경에 대해 공부하고자 JenkinsCI/Docker 공식 레포지토리를 포크해왔다.

 

Jenkins는 전부터 꾸준히 사용해왔지만 정확한 동작방식에 대해 파악하고,

컨테이너 기반 CI 환경에서 Jenkins가 어떤 방식으로 실행되고 환경을 구성하는지 이해해보고 싶었다.

Jenkins 이미지는 단순 WAR 파일을 실행이 아닌, 여러 .sh를 통한 환경 변수 설정, 권한 처리, 플러그인 준비 등을 거친다.

이러한 동작을 코드 레벨에서 직접 확인해보고자 레포지토리를 탐색하게 되었다.

 

탐색할 준비를 마치고, jenkins-support 스크립트를 읽던 중 retry_command 함수의 주석과 내용이 일치하지 않는 것을 발견했다.

 

# Retries a command a configurable number of times with backoff.
#
# The retry count is given by ATTEMPTS (default 60), the initial backoff
# timeout is given by TIMEOUT in seconds (default 1.)
#

 

주석에서는 Retry Command를 실시할 때, backoff 방식으로 실시한다고 적혀있었다.

 

echo "$(date -u '+%T') Failure ($exitCode) Retrying in $timeout seconds..." 1>&2
sleep "$timeout"
success_attempt=0
attempt=$(( attempt + 1 ))
timeout=$(( timeout ))

 

다만, 실제로 동작하는 코드에서는 일반적인 backoff 방식과 달리, 같은 값을 반환하였다.

이를 보고, 처음에는 backoff 단어에 꽂혀서 지수 백오프로 판단하고 ' 이거 오류인가? '라고만 생각하였다

 

 

다만, 실제로 이를 동작시켜보니 같은 값을 반환하고 있는 것을 제대로 볼 수 있었다.

최근 오픈소스 컨트리뷰션에 참가하는 개발자들이 꽤 있는 것을 보았기에,

이번 기회에 나도 대회는 아니지만 공식 레포지토리에서 젠킨스에 대해 나름의 컨트리뷰션을 해야겠다 마음 먹었다.

 

 

이를 기반으로 바로 JenkinsCI/Docker 공식레포에서 이슈를 파고 문의하게 되었다.

 

 

사실 이때까지만 해도, backoff라는 단어 하나 보고 혼자 지수 백오프라고 착각하고있었다.

지능이 낮을 수록 맥락보다 단어에 집착한다는데 아무래도 나인가 보다...

 

 

이슈를 올리고 답장이 없기에 maintainer를 태그해서 말을 걸었더니

maintainer에게서 바로 exponential backoff 라는 단어는 없다고 강조를 받았다..

 

하지만, 지수 백오프 방식이 아니라고 하더라도 주석에서는 백오프라는 단어가 등장했다.

백오프는 일반적으로 선형적으로 증가 시키는 전략이기에, 동일한 값 반환과는 맞지 않다 생각했다.

그래서 이부분에 대해 주석이 수정되던, 코드가 수정되던 명확하게 할 필요가 있다고 주장했더니,

이를 받아들이고 내게 수정을 요구했다.. 

 

 

[#1863](https://github.com/jenkinsci/docker/pull/1863

retry_command는 install-plugins.sh에서만 사용되던 함수로 24년도 install-plugins.sh 스크립트가 사라질 때 함께 삭제되어야 했던 코드였다고 한다. 다만, 당시 #1863에서 이를 놓쳤기에 대신 삭제해 달라는 요청을 받아 기꺼이 수락하게 되었다

 

코드를 삭제하고, PR을 날리면서도 내가 삭제한 이 코드 한줄이 어떤 나비효과를 불러올지 걱정됐다.
 
전세계에서 많은 사람들이 사용하는 젠킨스다보니, 아무것도 아닌 코드 한 줄이지만 삭제하면서 두려웠다.
 
PR을 올리기 전까지 jenkins-support가 미치는 영향 범위를 검토했고,
 
retry_command 함수가 여전히 다른 데서 사용되는지 찾아보았다.
 
이후에도, 다양한 OS 대상으로 도커 이미지 파일 만들어 실행해보며 검토하곤 했다.
 
 
jenkins 2.553 version Owner
 

 

그렇게 PR을 날렸고, 성공적으로 머지가 되며 jenkinsci/docker 공식 레포에 이름을 올리게 됐다.

지난 12년간 154명 뿐이었던 contributor에 이름을 올리게 되니까 뿌듯해 나도 모르게 글을 쓰게 되었다.

 

기여를 하면서 가장 크게 배운 점은, 커뮤니케이션과 맥락 이해였다.

단순히 코드를 수정하는 것이 아니라,

해당 코드가 작성된 의도와 사용 맥락을 이해하고 이를 기여자들과 논의하는 과정이 오픈소스 협업의 핵심이라는 것을 느꼈다.

 

작은 이슈와 PR이었지만,

서로 다른 배경과 언어를 가진 개발자들이 코드라는 공통의 언어로 의견을 주고받는 과정을 직접 경험할 수 있었다.

 

앞으로도 내가 실제로 사용하는 오픈소스 프로젝트들에도 조금씩 기여해보며 성장해보고싶다.

반응형

'DevOps' 카테고리의 다른 글

Gen AI on K8s/EKS 인퍼런스 최적화 (3)  (2) 2026.08.09
GenAI on K8s/EKS 인퍼런스 최적화 (2)  (1) 2026.08.04
GenAI on K8s/EKS 인퍼런스 최적화  (0) 2026.08.02
LDAP 알아보기  (3) 2026.07.15
kubernetes 설치해보기  (0) 2026.03.27