DevOps (20) 썸네일형 리스트형 JIRA & API GW를 통해 Jenkins 배포 승인체계 구성하기 - 3. JIRA 세팅 지라에서 Admin 권한이 있는 계정으로 들어가셔야 합니다. 우측 상단에서 시스템을 클릭해주세요 먼저, 이슈 탭으로 가서 전체 업무 플로우를 만들도록 하겠습니다. 이제, 좌측 업무 흐름에 가셔서 다이어그램을 위와 같은 구조로 만들었습니다. 여기서 문자열로 아래와 같이 Transition(전환) ID값을 기억해주셔야합니다. 해당 값을 통해 REST API를 던져서 이슈를 완료상태로 바꿀 수 있기 때문입니다. 이후 좌측 하단에 있는 웹훅 메뉴를 골라줍니다. 그리고 우측 상단에 있는 웹훅 만들기를 눌러주세요 이제 아래 웹훅 세팅을 해보도록 하겠습니다. URL 앞에 부분에는 구성한 API Gateway URL을 넣어주시면 되고 (Create Issue API) 이후 이슈가 업데이트 될 경우 트리거가 되는데, J.. JIRA & API GW를 통해 Jenkins 배포 승인체계 구성하기 - 2. API GW 세팅 API Gateway에서 총 3개의 리소스를 아래와 같이 만들 것입니다. approval/{issue}의 경우 Jira Web Hook이 발생하여 콜하는 부분이며, 이때 자신의 issue id값을 같이 던져주기 위해서 변수로 받게 구성하였습니다. create-issue는 젠킨스에서 빌드 중 결과값을 전달할 때 사용하며, done-issue는 배포가 완료 되었을 때, 이슈를 완료하기 위해 사용합니다. 먼저 API Key를 만들도록 하겠습니다. API Key를 사용하려면 위와 같이 사용량 계획과 같이 만들어 주어야합니다. 이후 반드시 API Gateway에 매핑하셔서 사용해야합니다. 저는 배포이고, 테스트이기 때문에 하루 요청 100개로 구성하였습니다. 또한, 아래와 같이 Jira web hook을 제외하고.. JIRA & API GW를 통해 Jenkins 배포 승인체계 구성하기 - 1. Intro 이전에는 Slack과 API Gateway와 Lambda를 통해 승인 체계를 구성하였었는데, 가장 많이 사용하는 협업 툴인 JIRA에서도 이와 같은 체계를 구성하려고 합니다. AWS API Gateway와 Lambda를 활용하면, 서버단에서 구성하여 웹훅등을 해결할 부분을 서버 비용 및 관리 포인트를 줄여서 사용할 수 있기 때문에 유용하게 사용하실 수 있습니다 이번에는 아래와 같은 아키텍쳐를 구성해 봤습니다. 보통은 지라를 통해 사용하시면, 개발 요청부터 이슈를 만들어서 사용하실텐데, 저는 그렇게까지 체계화 된 구조가 아닌 딱 배포부분만 지라에서 이슈를 자동으로 발급하고 승인하려고 합니다. 전체 플로우를 설명드리면 다음과 같습니다. 먼저, 젠킨스 Job을 build하면, Git Clone -> Build.. Slack Slash Command를 통해 AWS 서버 스케줄링하기 - 3. API Gateway & Slack REST API로 구성하도록 하겠습니다. Method를 POST로 Auth 함수를 연동시켜주세요 매핑 탬플릿은 아래와 같습니다. application/x-www-form-urlencoded ## convert HTML POST data to JSON ## get the raw post data from the AWS built-in variable and give it a nicer name #set($rawAPIData = $input.path('$')) ## first we get the number of "&" in the string, this tells us if there is more than one key value pair #set($countAmpersands = $rawAPIData... Slack Slash Command를 통해 AWS 서버 스케줄링하기 - 2. Lambda 가장 먼저, Token 값을 인증할 람다함수를 만들겠습니다. 슬랙 앱을 구성하고 맨 처음에 있는 토큰 값을 가지고 인증할 것입니다. import json import boto3 def check_token(token): token_list = ["Slack Verify Token"] if token in token_list: return True else: return False def lambda_handler(event, context): print(event) token = event['token'] client = boto3.client('lambda') if check_token(token): response = client.invoke_async( FunctionName='slack-slash.. Slack Slash Command를 통해 AWS 서버 스케줄링하기 - 1. Intro Slash Command의 구성도는 위와 같습니다. 슬랙에서 유저가 슬래쉬 커맨드를 입력하면, 세팅된 URL을 통해 입력한 텍스트와 Response URL 등이 전달되고 Response를 3000ms 안에 준 후에, Response URL로 제대로 된 응답을 계속해서 줄 수 있습니다. 따라서 Auth에서 처음 Slack Slash Command를 통해 받은 토큰 값을 체크하고 인증되었다는 Response를 준 후, 실제 커맨드에 대한 결과는 Response URL로 다른 람다함수를 실행하여 그 결과값을 전달해주는 형태로 구성하였습니다. 만약 좀 더 사용자에게 편하게 구성하고자 한다면, 이전 슬랙 승인체계 구축할때 사용하였던 Interactive component로 응답을 주어 EC2 리스트 중 선택하여 .. Slack으로 CICD 승인체계 구성하기 - 4. Slack, Jenkins Job 이제 마무리 단계입니다. 전 게시글에서 배포한 API, Gateway Jenkins Rest API를 콜하는 URL을 넣어주세요 자, 이제 기존 젠킨스 잡에서 누군가 Job을 Build 했을 때, 슬랙에서 승인이 되어야 넘어갈 수 있도록 Jenkins Job을 수정하도록 하겠습니다. 먼저, Slack Bot Token 값을 Credentials에 만든 후, 젠킨스 잡에서 변수로 넣어주도록 하겠습니다. 이제 기존 Pipeline 소스코드에 스크립트를 추가하겠습니다. 승인체계만 있는 Jenkins Pipeline Stage Script는 아래와 같습니다. 잘 읽어보시면 알겠지만 account(approver)가 admin이어야 넘어가는 형태입니다. Jenkins 권한을 쪼개서, 스크립트 수정을 못하게 (볼 .. Slack으로 CICD 승인체계 구성하기 - 3. API Gateway REST API로 구성하도록 하겠습니다. 전 게시글에서 만든, Lambda들을 넣어주세요 리소스를 하나씩 추가해주겠습니다. 이제 method를 post로 구성해서 람다를 연결시켜주세요 이유는 잘 모르겠지만 애들도 사람인지라 이렇게 못 찾는 경우가 있습니다. 그럴 땐 람다 ARN을 복사해서 넣어주세요 만들어진 메소드 -> 통합 설정 -> 매핑 탬플릿에서 application/json -> 메서드 요청 패스스루 지정해주시면 됩니다. 마찬가지로 rest-api도 리소스를 만들어주겠습니다. 똑같이 메소드 POST에 람다 골라주시고, 이번엔 아래와 같이 설정해주세요 application/x-www-form-urlencoded ## The `substring(8)` returns the input with ever.. 이전 1 2 3 다음