Travis CIのビルド結果をサーバにPOST通信で送信する方法メモ
概要
GitHubのリポジトリにPushもしくはPull Requestをした時に自動でテストを走らせる為のツールに、Travis CIがあります。
Travis CIでのテスト結果をSlackなどに通知させる方法はインターネット上にたくさん記事が挙げられていますが(こちらやこちらなど)、Webhook
を用いてサーバにテスト結果をPOSTする方法に関しては、Slackほど情報が手に入らず、且つハマりどころが多かった為、ここにメモを残します。
やりたかったこと
Travis CIのテスト結果を、AWSのAPI GatewayにPOSTして、その情報を基にLambdaでゴニョゴニョしたかったです。
失敗例
Webhooks
を用いてPOST通信を行おうとしました。その時の.travis.yml
が以下です。
language: go
os: osx
osx_image: xcode10.2
go:
- 1.11
install:
- export GO111MODULE=off
- go get -u github.com/golang/lint/golint
script:
- golint ./...
- go test game.go
notifications:
webhooks: $API_GATEWAY
env:
global:
secure: NexCzvXM0+zYrXfKRzUL6/xpg ~省略~
上では、環境変数API_GATEWAY
に送信先のurlを保持させ、暗号化させています(暗号化の方法は、こちらやこちらに載っています)。
そして、この環境変数を用いて、Webhookで通知を送ろうとしました。以下の部分です。
notifications:
webhooks: $API_GATEWAY
しかし、この方法ではテスト終了時にリクエストが送信されることはありませんでした。
こちらに書いてあるように、notifications
の設定はビルド前に行われるのに対し、環境変数の設定はビルド中に行われる為、notifications
内の項目には環境変数の設定が反映されない為です。
解決法
環境変数を用いずに、urlを.travis.yml
に直に書き込んだらうまくいくようになるのですが、それをGitHubに挙げてしまうのはなんかいい気分がしません。そこで、以下の方法で迂回しました。
curlで送信
notifications
ではなく、'after_success'とafter_failure
の中でcurl
コマンドを叩いて、リクエストを送信するようにしました。
まず、以下のようなbashファイルを用意します。
#! /bin/bash
curl -X POST -H "Content-Type: application/json" $API_GATEWAY
このファイルをビルド完了後に実行することで、正常に通知が送られるようになります。
language: go
os: osx
osx_image: xcode10.2
go:
- 1.11
install:
- export GO111MODULE=off
- go get -u github.com/golang/lint/golint
script:
- golint ./...
- go test game.go
after_success:
- ./message.sh
after_failure:
- ./message.sh
env:
global:
secure: NexCzvXM0+zYrXfKRzUL6/xpg ~省略~
環境変数の取得
上に示したbashファイルでは、リクエストボディ部が空のリクエストが送られてしまいます。リクエスト内容にTravis CIのビルドのurlやコミットメッセージ内容などを組み入れたいときは、Travis CIのデフォルトの環境変数を利用します。
こちらのドキュメントにデフォルトの環境変数の一覧が載っていますが、これらを基にbashファイルを書き換えます。
#! /bin/bash
curl -X POST -H "Content-Type: application/json" -d '{"status":0,"url":"'"$TRAVIS_JOB_WEB_URL"'","message":"'"$TRAVIS_COMMIT_MESSAGE"'"}' $API_GATEWAY
上の例では、コミットメッセージとビルドのurlを送信しています。
Author And Source
この問題について(Travis CIのビルド結果をサーバにPOST通信で送信する方法メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/KMim/items/80559cca5187481681f1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .