본문 바로가기
Programing/Groovy

Line Notify 사용기

by Tomining 2016. 11. 4.
최근 “커맨드 라인에서 Line에 메시지를 보낼 수 있는 Line Notify”라는 글이 소개가 되었습니다.
내용을 읽어보니 Http 호출을 이용하여 라인에 메시지를 보낼 수 있는 내용이었습니다.
간단히 해 볼 수 있는 기능이라서 따라해 보았습니다.

Command Line에서 라인 메시지 보내기

먼저 Line Notify에 로그인을 하여 Access Token을 생성하여야 합니다.
“Generate token”을 클릭하면 아래와 같이 특정 대화창과 연결되는 토큰을 할당 받을 수 있습니다.


Copy 버튼을 통해서 생성된 Access Token을 복사할 수 있습니다.


이제 Command Line에서 메시지를 보내보겠습니다.
$ curl -X POST -H 'Authorization: Bearer gcJU95ghZ1i2VlyYVYfy1FES63hA9kXAvL9rPb5epjn' -F 'message=Hello Line' https://notify-api.line.me/api/notify
{"status":200,"message":"ok"}


message 항목으로 전송한 내용이 라인 메시지로 잘 전달된 것을 확인할 수 있습니다.
Http로 손쉽게 호출할 수 있기에 많은 곳에서 응용할 수 있을 듯 합니다.

Jenkins 빌드 결과 전송하기

Jenkins 2.0에서 새로 도입된 pipeline을 통해서 작업을 진행해 보겠습니다.
New Item > Pipeline으로 새로운 pipeline job을 생성합니다.(여기서는 TestPipeline으로 이름을 지었습니다.)
빌드유발 > Pipeline 항목에 아래와 같이 Groovy Script를 작성할 수 있습니다.
 


#!groovy

node {

    try {

        stage 'Checkout'

            checkout scm

        stage 'Build and test' 

            sh './gradlew clean check'

            currentBuild.result = 'SUCCESS'

    } catch (err) {

        currentBuild.result = 'FAILURE'

    }

    stage 'Notify' 

        notifyLINE('0nWiXPLLlSPpYnkdRhgIXirmmYFNcjh4VQyu2VQja7x', currentBuild.result)

}

  

def notifyLINE(token, result) {

    def isFailure = result == 'FAILURE'

      

    def url = 'https://notify-api.line.me/api/notify'

    def message = "Build ${env.BRANCH_NAME}, result is ${result}. \n${env.BUILD_URL}"

    def imageThumbnail = isFailure ? 'http://developers.linecorp.com/blog/wp-content/uploads/2016/10/moon.png' : ''

    def imageFullsize = isFailure ? 'http://developers.linecorp.com/blog/wp-content/uploads/2016/10/moon.png' : ''

      

    sh "curl ${url} -H 'Authorization: Bearer ${token}' -F 'message=${message}' -F 'imageThumbnail=${imageThumbnail}' -F 'imageFullsize=${imageFullsize}'"

}



Pipeline 빌드를 수행하면 메시지 전송이 잘 이뤄짐을 확인할 수 있습니다.
위 예제는 Gradle로 빌드하는 Job 테스트이기 때문에 단순히 Pipeline만 생성하여 수행하면 Job이 실패합니다. 다만 라인 메시지는 잘 전송됩니다.

기존 Job의 빌드 결과에 Line Notify 연동하기

Groovy Postbuild plugin을 활용하여 진행해 보았습니다.
(HttpRequest만 수행할 수 있다면 꼭 Groovy가 아니더라도 구현이 가능합니다. 구현하는 언어에 따라 Plugin은 달라질 수 있습니다.)

def notifyLINE(token, result, branchName, branchUrl) {

    def isFailure = result == 'FAILURE'

      

    def url = 'https://notify-api.line.me/api/notify'

    def message = "Build ${branchName}, result is ${result}. \n${branchUrl}"

    def imageThumbnail = isFailure ? 'http://developers.linecorp.com/blog/wp-content/uploads/2016/10/moon.png' : ''

    def imageFullsize = isFailure ? 'http://developers.linecorp.com/blog/wp-content/uploads/2016/10/moon.png' : ''

    

    def command = "curl ${url} -H 'Authorization: Bearer ${token}' -F 'message=${message}' -F 'imageThumbnail=${imageThumbnail}' -F 'imageFullsize=${imageFullsize}'"

    print command

    command.execute()

}


notifyLINE('6PUqyn2iEJ1jxgfT0HmuR6vb61H8vKPstzv2LOtSMZb', manager.build.result, 'TestJob', 'http://testJob.com/jenkins/job/TestJob/' + manager.build.number)



위처럼 진행하면 메시지가 잘 전달됨을 확인 할 수 있습니다.
shell script 수행 방식으로 예제를 진행했으나, HttpBuild 같은 라이브러리를 활용하면 좀 더 쉽게 구현할 수 있을 것으로 생각됩니다.

마무리하며…

Http Request로 쉽게 라인 메시지를 보낼 수 있어서 여러 분야에 응용을 해 볼 수 있을 것 같습니다.
Jenkins 뿐만아니라 시스템 오류시 각 담당자에게 알람을 전송한다면 문자보다는 좀 더 빨리 알 수 있지 않을까 생각합니다.
위 예제에서는 이미지 전송 케이스는 확인하지 않았지만 필요한 경우에 이모티콘이나 이미지 등도 전송이 가능하기 때문에 문자보다는 좀 더 나을 것이라 판단됩니다.

참고사항

그룹 대화창에 등록하려면 Line Notify가 해당 그룹에 초대되어 있어야 합니다. 아니면 메시지를 보낼 권한이 없다고 오류가 발생할 수도 있습니다.
 

참고