A Slack bot for AWS Lambda that automate deployment with Circle CI.
- Slashのワークスペース管理より、Appカスタムインテグレーションへ進み、Slash Commandsを追加します。
- Slash Commandsのインテグレーションを追加し、トークンに表示された内容を取得します。
このLambda関数は、AWS API Gatewayからコマンドを受け取って、別のLambda関数(gamba_deploy_runner)へリクエストを引き継ぎます。 Githubのプルリクエストの処理は若干時間がかかるため、1つのLambda関数内で一度に処理しようとするとタイムアウトが発生してしまいます。
- AWS Lambdaに用意されているBluePrintに用意されている、
Slack-echo-commandを元に、lambda関数を作成します。 - 以下のコマンドにより、
lambda_function.zipを作成します$ ./deploy.sh - AWS Lambdaの関数コードに
lambda_function.zipをアップロードします - ハンドラーを
index.slack_handlerに設定します - 以下の環境変数を登録します
slackToken: Slackの設定で表示されたトークン
gamba_deploy_botからリクエストを引き継ぎ、Githubのプルリクエストの処理を実際に行うLambda関数です。
- 上記で作成した
lambda_function.zipをアップロードします - ハンドラーを
index.deploy_handlerに設定します - 以下の環境変数を登録します
githubToken: Githubのアクセストークン
/gamba_deploy_bot - ANY - 統合リクエストを開き、マッピングテンプレートを追加します- Content-TYpe:
application/x-www-form-urlencoded - テンプレート:
{ "body": $input.json("$") }
- Content-TYpe:
- APIをデプロイします
- このとき表示されたURLをメモします
- API Gatewayで取得したURLをSlash CommandsのURLに設定します
- ユーザの名前には
deploy_bot、アイコンには適切な画像を設定します
Slackのチャネルに対して、以下のコマンドを送ると、デプロイが始まります。
/deploy branch_name to environment
branch_name: デプロイするブランチ名を指定します。省略時はmasterがはいります。environment: 以下のいずれかを指定します。production: 本番環境にデプロイしますstaging: ステージング環境にデプロイしますapp: iOS/Androidのアプリのビルド&AppStore/GooglePlayへのアップロードandroid: Androidのアプリのビルド&GooglePlayへのアップロードios: iOSのアプリのビルド&AppStoreへのアップロードcodepush: CodePushへのJSコードのアップロードweb:www.getgamba.com/m配下にベータ版Webクライアントのみデプロイします
branch_name: デプロイするブランチ名を指定します。省略時はmasterがはいります。
Slackのチャネルに対して、以下のコマンドを送ることで、各種メンテナンスを行うことができます。
/deploy command
maintenance start: gamba!をメンテナンスモードに切り替えます。これによって、APIリクエストはすべてステータスコード503を応答するようになります。maintenance stop: メンテナンスモードを解除します。APIリクエストは正常応答を返すようになります。rollback production: 直前のデプロイリリースの状態にロールバックします。
