CI
CircleCI
Slack
slackcat
CircleCI2.0

CircleCIからSlackにファイルをアップロードする

はじめに

今回CircleCIで技術書を書いてるときにビルドしたPDFをSlackに投げるようにしたのでその時のメモ

今回使うもの

  • slackcat
    • slackに対してCUIからファイルの送信をするために使います

slackmeの設定

まずCircleCIに設定する前にslcakのアクセストークンを得る必要とアプリケーションをSlackのワークスペースにインストールする必要があります。
今回は以上の前準備をローカルのmacで行います

インストール

githubにslackcatのインストール方法が書いてあります。 もしbrewがインストール済みなら下のコマンドで可能です。
https://github.com/bcicen/slackcat

$ brew install slackcat

その後設定を行います。 設定は以下のコマンドを実行します

$ slackcat --configure

実行するとブラウザが立ち上がってインストールの許可を求められるので対処のワークスペースを選択して Authorizeを押します。
スクリーンショット 2018-07-28 14.49.04.png

問題がなければトークンが表示されるのでメモします
スクリーンショット 2018-07-28 14.49.43.png

これで前準備は終わりです。

CircleCIの設定yaml

CircleCIの設定をしていきましょう。

まずslackのトークンをCircleCIに登録してきましょう。
CircleCIのプロジェクト設定を開いて Environment Variables を開きます。
スクリーンショット 2018-07-28 15.08.17.png

開いたら右上にある Add Variable をクリックします。
スクリーンショット 2018-07-28 15.08.21.png

するとモーダルが表示されるのでNameに slack_token Valueには先程のトークンを入力しておきます。 ここにある値はYamlファイルで ${Name}の形で呼び出せます。

以下が今回使用した設定Yamlです

例としてNodeのイメージを使用しています

version: 2
jobs:
  build:
    docker:
      - image: circleci/node:8
    steps:
      - checkout
      - run:
          name: npm install
          command: npm install
      - run:
          name: run textlint
          command: npm run lint
  deploy:
    docker:
      - image: node:6.10.0
    steps:
      - checkout
      - run: curl -Lo slackcat https://github.com/bcicen/slackcat/releases/download/v1.4/slackcat-1.4-$(uname -s)-amd64 && mv slackcat /usr/local/bin/ &&  chmod +x /usr/local/bin/slackcat
      - run: echo ${slack_token} > ~/.slackcat
      - run: slackcat --channel [投げるSlackのチャンネル名] ./[投げたいファイル]

workflows:
  version: 2
  build_and_deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build

最初の下の部分はslackcatの設定ですね。Githubから落として実行可能状態にしています。また先程CercleCIに登録したSlackとトークンの情報を~/.slackcatに書き込んでいます。

- run: curl -Lo slackcat https://github.com/bcicen/slackcat/releases/download/v1.4/slackcat-1.4-$(uname -s)-amd64 && mv slackcat /usr/local/bin/ &&  chmod +x /usr/local/bin/slackcat
    - run: echo ${slack_token} > ~/.slackcat

最後のいちぶんで 実際にSlackにファイル送信をしています。

- run: slackcat --channel [投げるSlackのチャンネル名] ./[投げたいファイル]

実装結果

アカウントは自分のものになっていますが無事CircleCIのビルド時にPDFのポストされました!
スクリーンショット 2018-07-29 0.09.38.png