현재 CI/CD를 구축하면서 젠킨스와 깃랩을 연동시켜 깃랩에서 merge가 일어나면 젠킨스가 바로 작동할 수 있도록 했습니다.
구축을 하면서 완성된 아키텍처는 아래와 같습니다.
여러가지 방법과 플러그인이 있었지만 젠킨스 버전을 올릴 수 없는 상황이라 버전에 맞는 방법을 찾았습니다.
제너릭 웹훅 트리거를 활용하여 젠킨스(Jenkins) 작업을 자동화하는 방법이 있습니다.
제너릭 웹훅 트리거는 젠킨스에서 제공하는 플러그인 중 하나로, 외부 시스템에서 발생하는 이벤트에 따라 특정 젠킨스 작업을 자동으로 실행할 수 있게 해줍니다.
CI/CD를 구축할때 이 기능은 GitHub, GitLab 등의 분산 버전 관리 시스템과의 통합에서 특히 유용합니다.
웹훅 토큰 생성 및 작업 지정
제너릭 웹훅 트리거를 사용하려면 먼저 젠킨스에서 웹훅 토큰을 생성해야 합니다. 이 토큰은 외부 시스템에서 젠킨스로 요청을 보낼 때 해당 요청이 특정 젠킨스 작업과 연결되도록 합니다.
웹훅 토큰은 젠킨스 작업 설정에서 생성하고 관리할 수 있습니다. 토큰의 이름은 사용자의 마음대로 정할 수 있습니다.
Post Content Parameters 설정
웹훅 요청의 내용을 분석하여 조건에 맞는 파라미터를 설정하는 단계입니다. 여기서는 'Variable', 'Expression' 등을 정의하여 외부 시스템에서 보내는 요청의 특정 내용을 젠킨스에서 사용할 변수로 변환합니다.
- Variable : 젠킨스 내에서 사용할 변수의 이름을 정의합니다.
- Expression : 외부 시스템에서 보내는 요청(JSON 형태가 일반적) 내의 특정 데이터를 지정합니다. 이때, JSONPath 또는 XPath와 같은 표현식을 사용하여 요청 내용 중 원하는 데이터를 추출하도록 설정합니다.
Optional Filter 설정
Optional Filter는 트리거를 발생시킬 조건을 세밀하게 설정하는 부분입니다. 여기서는 'Expression'과 'Expected Value'를 사용하여 조건을 정의합니다. 설정한 조건에 따라 젠킨스 작업이 실행될지 여부가 결정됩니다.
- Expression : 조건을 판단하기 위해 평가할 값 또는 경로를 지정합니다.
- Expected Value : Expression이 평가되어 나온 결과와 비교할 기대값을 지정합니다. 이 값과 Expression의 결과가 일치할 경우 젠킨스 작업이 실행됩니다.
깃랩에 연결
젠킨스에서 제공해주는 url을 넣습니다.
http://JENKINS_URL/generic-webhook-trigger/invoke?token={내가 만든 토큰}
어떤 조건에 따라 웹 훅을 발생 시킬것인지 Trigger를 선택합니다.
테스트를 누르면 웹훅을 실행시켰을 때의 요청과 결과를 알려줍니다.
이곳에서 Post Content Parameters에서 설정한 값들을 찾습니다. Expression에 있는 표현식으로 값을 매핑합니다.
아래 사이트를 사용하면 조금 더 쉽게 찾을 수 있습니다.
주의사항
GitHub, GitLab 등 다양한 분산 버전 관리 시스템을 사용할 때, 각 시스템이나 버전에 따라 요청하는 JSON의 구조가 다를 수 있습니다. 따라서, 정확한 'Expression'을 설정하기 위해서는 해당 시스템의 웹훅 요청 형태를 잘 이해하고 있어야 합니다. 이를 위해 문서를 참조하거나, 실제로 발생하는 웹훅 요청의 내용을 확인하는 것이 좋습니다.
모든 작업이 끝났다면 Trigger에 맞는 이벤트를 발생 시키고 깃랩의 웹훅에서 이력을 확인합니다.
매핑한 값들이 설정한 값들과 같다면 토큰으로 설정한 특정 젠킨스 job을 자동으로 실행시킵니다.