4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Travis CIのビルド結果をサーバにPOST通信で送信する方法メモ

Last updated at Posted at 2019-04-14

概要

GitHubのリポジトリにPushもしくはPull Requestをした時に自動でテストを走らせる為のツールに、Travis CIがあります。

Travis CIでのテスト結果をSlackなどに通知させる方法はインターネット上にたくさん記事が挙げられていますが(こちらこちらなど)、Webhookを用いてサーバにテスト結果をPOSTする方法に関しては、Slackほど情報が手に入らず、且つハマりどころが多かった為、ここにメモを残します。

やりたかったこと

Travis CIのテスト結果を、AWSのAPI GatewayにPOSTして、その情報を基にLambdaでゴニョゴニョしたかったです。
Screen Shot 2019-04-14 at 14.45.06.png

失敗例

Webhooksを用いてPOST通信を行おうとしました。その時の.travis.ymlが以下です。

.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ファイルを用意します。

message.sh
# ! /bin/bash

curl -X POST -H "Content-Type: application/json" $API_GATEWAY

このファイルをビルド完了後に実行することで、正常に通知が送られるようになります。

.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
after_success:
- ./message.sh
after_failure:
- ./message.sh
env:
  global:
    secure: NexCzvXM0+zYrXfKRzUL6/xpg ~省略~

環境変数の取得

上に示したbashファイルでは、リクエストボディ部が空のリクエストが送られてしまいます。リクエスト内容にTravis CIのビルドのurlやコミットメッセージ内容などを組み入れたいときは、Travis CIのデフォルトの環境変数を利用します。

こちらのドキュメントにデフォルトの環境変数の一覧が載っていますが、これらを基にbashファイルを書き換えます。

message.sh
# ! /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を送信しています。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?