やること
Google HomeやAndroidスマホ等のGoogle Assistant搭載デバイスに「ビルドして」と話しかけるだけで、Jenkinsでビルドします。なお、各サービスどうしの連携はIFTTTを利用します。
前提
- Jenkinsの実行環境があること
- Google HomeやAndroidスマホ等のGoogle Assistant搭載デバイスがあること
構成1. IFTTTのWebhookから直接Jenkinsビルド
構成としては以下の通りです。IFTTTのWebhookにJenkinsのビルドリクエストを直接指定します。
以下はIFTTTの設定です。左がGoogle Assistant、右がWebhooksになります。
上記設定により、Google HomeやAndroidスマホ等のGoogle Assistant搭載デバイスに
「ビルドして」と話しかけると(左の設定)、
「http://user:APIトークン@35.184.206.154//jenkins/job/test_build/build?token=testtoken 」 にアクセスし(右の設定)、ビルドが開始されます。
構成2. IFTTTのWebhook→FaaS→Jenkinsビルド
構成としては以下の通りです。IFTTTのWebhookにAWS LambdaやGCPのCloud FunctionsのようなFaaSを指定して、そこからJenkinsにビルドリクエストを送ります。ここでは、「Google Cloud FunctionsからSlackへ通知を送る」で使ったFunctionを利用して行いました。この構成にすることで、コールバック処理を指定することも可能となります。
IFTTTの設定は「構成1」と同じです。ただし、Webhook側はFaaSのURLを指定します。
Cloud Functions側のソースは以下のような感じです。
const request = require('request');
exports.build= function build(req, res) {
var headers = {
'Content-Type':'text/plain'
}
var options = {
url: 'http://user:APIトークン@35.184.206.154/jenkins/job/test_build/build?token=testtoken',
method: 'GET',
headers: headers
}
request(options, function (error, response, body) {
// コールバック処理
})
res.status(200).send('Success');
};
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"request": "^2.81.0"
}
}
以上です。
実務で利用できるかどうかは別として、何かの参考になればと思います。
参考
Jenkinsのビルドジョブのリモート実行に関しては、以下を参考にしました。
https://tomokazu-kozuma.com/how-to-execute-jenkins-job-remotely/
http://symfoware.blog68.fc2.com/blog-entry-1902.html