2020년 2월 10일 월요일

GitHub에서 webhook으로 AWX Template 실행하기

github에 코드 push후에 자동으로 뭔가(보통 빌드나 배포겠지) 이어서 하려고 Jenkins 에서 GitHub Integration Plugin  등을 사용할 수 있다.
https://plugins.jenkins.io/github-pullrequest/

만약 AWX에 template를 실행하고 싶다면 어떻게 하믄 될까

다 준비되어 있다아아...

엔서블타워 매뉴얼(참고)
https://docs.ansible.com/ansible-tower/latest/html/userguide/webhooks.html

!!  아래 나오는 URL은 접근이 안되는 URL이고 token은 모두 제거했으므로 뭔가 해보려고 삽질을 하지 말자 그런다고 누가 10전도 안준다. 공부나 해라

원래 AWX 4.0을 쓰고 있었는데 여기는 webhook이라고 별도 기능이 제공되는건 없고  AWX API를 호출하는 방식으로 webhook을 구현할 수 있었다.
이번에 AWX 9.1.1로 업그레이드 하고보니 webhook이 jenkins의 webhook plugin처럼 별도의 기능으로 편하게 제공되는 것을 확인했다.

대략적인 순서는
  1. GitHub에서 PAT(Personal Access Token)를 생성하고 
  2. 자동으로 실행시킬 AWX의 template에서 웹훅(webhook)을 활성화하고  
  3. 활성화했을때 나오는정보(payload,key)를 사용하여 github에서 Webhook을 설정한다
  4. git에 push나 지정한 이벤트를 발생시키면 AWX의 template가 자동연계실행 되는지 확인한다.
요런식이다.


  1. 내 Github의 PAT생성

    1. 당연히 github에 로긴
    2. 오른쪽 위 구석의 개인프로파일에서 "Settings" 선택 
    3. 왼쪽 메뉴에서  "Developer Settings" 선택 
    4. 왼쪽 메뉴에서 "Personal access tokens" 선택  (기본은 아무것도 없는게 정상)
    5. 우측의 "Generate new token" 클릭 
    6. 필요한 권한을 설정한다  (필요한 접근권한만 주도록 한다)
    7. 맨 아래 "Generate token" 버튼 클릭  - 토큰이 발급 되었다 이걸로 AWX Template에 webhook 설정시 연동하면 template에서 callback으로 정보를 전달 할 때 사용할 수 있다. 사실 필수는 아니고 필요한 경우 옵션으로 사용하면 된다.
      1. key는 지웠다. 쓸대 없이 뭐 해볼라고 하지마라!!
  2. GitHub PAT Credential 작성 
    1. AWX에 로그인한다.
    2. 왼쪽 메뉴에서 "CREDENTIALS"를 선택
    3. 우측 화면 위쪽에 녹색의 "+" 버튼이 있다. 자격증명을 추가하는 버튼이다.
    4. 입력화면 
      1. NAME : 알아서 적당히 
      2. DESCRIPTION : 알아서 적당히
      3. ORGANIZATION : 사용할 권한이 있는 조직을 선택 
      4. CREDENTIAL TYPE : "GitHub Personal Access Token"을 선택한다.  
      5. TOKEN : type을 선택하면 나타난다.  위의 GIT에서 생성한 PAT를 넣어준다. 
    5. "SAVE"
  3. Template(AWX)에 WEBHOOK 설정 

    1. AWX에 로그인한다. 
    2. git에 연동할 template를  선택한다
    3. "OPTIONS" 중에 "ENABLE WEBHOOK"을 체크한다. 뭔가 추가로 입력할 수 있는 박스들이 나타난다. 
      1. 버전이 낮으면 이 기능이 없다. 이런 경우 API Call 방식으로 연동을 할 수 있으나 그 부분은 여기서 다루지 않는다. 내가 테스트한 버전은 AWX 9.1.1이다.  
    4. 입력화면

    저장을 한번 해야 key가  만들어진다.
    만들어 놓은 Credential선택
      1. WEBHOOK SERVICE : github, gitlab중에 선택한다.
      2. WEBHOOK KEY : 한번 저장해야 생성된다. 저장하면 생성되는 키로 github에 연동하면 github에서 해당 template로  인증 token으로 사용된다. (git --> awx)
      3. WEBHOOK CREDENTIAL : 앞서 작성한 git PAT Credential을 등록해준다. 이 자격증명은 실행 결과에 대한 Callback시 git으로  인증 token으로 사용된다.(awx --> git)
  4. GitHub Project에 설정 

    1.  이벤트 발생(push등)시 awx에 연동할 repository에 awx연동을 위한 설정을 추가한다.
    2. github에 로그인하고 repository를 선택한다.
    3. project의 "Settings" 선택
    4. 왼쪽 메뉴에서 "Webhooks" 선택 - 기본 아무것도 없다.
    5. 오른쪽 화면에 "Add webhook" 버튼클릭
        1. Payload URL : AWX template설정시 만들어지는 WEBHOOK URL을 입력한다
        2. Content type : AWX 연결시 json
        3. Secret : AWX template설정시 만들어진 KEY를 입력한다.
        4. SSL verigication : ssl 접속을 한다. awx를 SSL로 접속하지 않을경우 끈다. 번거로와도 SSL접속을 되도록 AWX를 설치하는것을 권장한다.
        5. trigger : 어떤 이벤트시에 AWX template를 호출할 것인지 event를 선택한다. 나는 push event만 선택했다. 원한다면 다른것들도 가능하다.
        6. Avtive : Check해야 활성화ㅣ
    6. "Add webhook" 버튼을 눌러 저장 
    7. 에러 발생시에는..
      1. add시에 자동으로 테스트를 수행한다. 이때 실패하면 빨간색 표시가 뜬다
      2. 내용 설정을 다시한번 확인해본다. edit를 눌러 들어가면  직접 test를 할 수 있는 버튼이 있다.
이상으로  git hub에서 awx로  webhook을 사용하여 pipe를 연결하는 방법을 설명하였다.
회사내부에 gitHub Enterprise를 사용하고 있지 않다면  공개 github.com에서 사내의 awx 서버에 접속하기란 쉽지 않을 수 있다.(보통 보안상 접근불가)
GitLab (opesource)도 지원하므로 사내에 repository를 구축해서 연동하면 충분히 사용할 만 하다. 

git에 push -> jenkins (일반적으로 build test, code test) 형태로 주로 사용하고 
실제 배포는 jekins에 들어가서 버튼을 누를겁니다....(자동은 무섭....)

빌드는 jenkins에서 하지만 서버에 파일 넣고 재구동 하기가 꽤나 번거로울겁니다. 보통 ssh plugin으로 쉘명령 날리기로 하실껀데....뭐 에러나고 권한문제생기고...그렇죠

ansible plugin도 있으니 ansible yaml code를 jenkins에 넣어서 작업하시는 분들도 있을 것이고요 

AWX를 잘 쓰고 있다는 가정하에 다양하게 연동하실 수 있을 겁니다. 

git에 push -> awx template  (build? copy? restart?)
git에 push -> jenkins pipeline -> awx template 

상상력을 발휘해보시고 일을 좀 더 편하게 할 수 있는 방법을 찾아보세요 

.이상