Upgrade to Pro — share decks privately, control downloads, hide ads and more …

R, Git, Droneを使ってconfluenceへのKPI予測レポートを自動化した話

R, Git, Droneを使ってconfluenceへのKPI予測レポートを自動化した話

Tokyo.R #84で発表したスライドです。

Kazuhiro Maeda

April 04, 2020
Tweet

More Decks by Kazuhiro Maeda

Other Decks in Programming

Transcript

  1. はじめに 自己紹介 名前/アカウント 前田和寛(Maeda Kazuhiro) @kazutan Twitter GitHub Qiita, r-wakalang,

    etc... 所属 LINE Fukuoka株式会社 開発センター - DataLabs - DataAnalysisチーム マネージャー 3 / 32
  2. 今日のお話 要件整理 大枠の処理は以下の通り daily KPIsを算出 算出したKPIスコアを用いてモデリング fitting forecast レポート作成 各KPI指標をplot、table化

    関係者が閲覧できる、confluence Wiki上の適切な場所へレポート作成 各指標ごとにページを分けていく 8 / 32
  3. Overview Outlines 1. R実行環境用のDocker imageのビルド 2. 分析フローの構築 1. データ取得、指標算出 2.

    モデリング、forecast 3. レポート用Rmdファイルを生成 4. Rmdファイルをrender & Confluence Wikiへpublish 5. 上記処理をオーガナイズするスクリプト 3. Droneをセット 4. Jenkinsをセット 11 / 32
  4. Overview ポイント1 - Droneを採用 cf. Jenkinsに代わるGo製OSS CIツールDrone 実行環境がdockerコンテナベース 実行環境の構築やカスタマイズが容易、再現性の担保 Rをフルに使える!!!

    gitとの連携、UIがシンプルで使いやすい トリガー設定やsecretsが簡単・便利 すでに弊社はDroneを採用していてすぐに使える状態だった <- 重要!! ポイント2 - メンバーで共同開発 データ処理・モデリングをメンバーに、全体設計・その他を私が担当 タスクを細分化していくことで、効率よく開発ができた 12 / 32
  5. 実装(1) Docker imageのビルド Docker imageのdeploy image build/deployにDroneを利用 1. 社内のGHEにdocker用リポジトリを準備 2.

    Dockerfileを設置 3. Droneの設定用yamlファイルを準備 公式のDocker pluginを利用 http://plugins.drone.io/drone-plugins/drone-docker/ imageは社内のHarborへ Harborと接続する設定などはDroneのsecretsを利用 triggerはpush, mergeに設定(定期実行にはしない) こんな感じでうまくできました 15 / 32
  6. 実装(2-3) レポート用Rmd生成 今回の要件 KPI指標それぞれでforecast それぞれの指標ごとにレポートを作成・publishする 基本的なレイアウトは同一 対象とする変数が変わる title: をそれぞれの指標に合わせて変更する必要がある これが厄介で、R

    Markdownのパラメータでは対応不可 今回のアプローチ 1. glue を想定した、Rmdファイル自体のテンプレRmdファイルを準備 2. テンプレRmdファイルをreadlines して文字列として取得 3. glue glue() を利用して、取得した文字列へ変数名などを流し込む 4. 文字列をwritelines して、Rmdファイルを生成する 19 / 32
  7. 実装(2-3) レポート用Rmd生成 テンプレの内容(例) title: KPI予測 - {var_name} (中略) ```{r} target_var

    = '{var_name}' (以下 target_var 利用 filter 処理) ``` glueして生成したRmdの内容(例) title: KPI予測 - uu (中略) ```{r} target_var = 'uu' (以下 target_var 利用 filter 処理) ``` 20 / 32
  8. 実装(2-4) render & publish line/conflrパッケージ Rmdファイルをrenderしてconfluence WikiへPublishするのに利用 conflr confl_create_post_from_Rmd で可能

    しかし、できればRmdのyamlヘッダに設定を書いておきたい… PR出した https://github.com/line/conflr/pull/44 (現在はさらに改良されているけど)これで設定はRmdテンプレに書けばOKに output: conflr::confluence_document: space_key: "kosaki" parent_id: "20200404" update: TRUE use_original_size: TRUE 21 / 32
  9. 実装(2-5) 分析処理のオーガナイズ exec.R 「このファイルを実行すれば1-4の処理が順次実行される」ように組む droneからshellでこのファイルを実行させるため このとき、drone側からパラメータを渡す # 感 設定 最初

    入 args commandArgs(trailingOnly = TRUE) confl_username as.character(args[1]) confl_password as.character(args[2]) db_user as.character(args[3]) db_password as.character(args[4]) 22 / 32
  10. 実装(3-1) drone.ymlの設定 主な設定内容 こんな感じです: kind: pipeline type: docker name: real_exec

    steps: - name: upload_report pull: default image: (実装1 準備 docker image 指定) environment: CONFL_USERNAME from_secret: confl_username CONFL_PASSWORD from_secret: confl_password DB_USER from_secret: db_user DB_PASSWORD from_secret: db_password commands: - Rscript ./exec.R $CONFL_USERNAME $CONFL_PASSWORD $DB_USER $DB_PASSWORD $DRONE_BRANCH 24 / 32
  11. 実装(3-1) drone.ymlの設定 drone側の設定 1. DroneのWeb UIを開き、該当のGitリポジトリへ 2. 該当リポジトリをActivate 3. ymlファイルへのパスとSecretsを設定

    項目については一つ前のスライド参照 4. Cron Jobsについては設定しない 理由は実装4にて説明 これだけでOK 25 / 32
  12. 実装(4) Jenkinsの設定 なぜJenkinsも使うの? Drone v1以降にはCron Jobsを設定可能 しかし、「何時に実行!」という設定は難しい cf. Go製OSS CI/CDプラットフォーム

    drone 1.0.0-rc.1 の新機能・変更点 今回はできるだけ更新時間を固定させたい DroneのAPI経由で更新するスクリプトをJenkinsのcronで回すことにした 設定内容 詳細は省略 Drone APIについては公式Doc参照: https://docs.drone.io/api/overview/ これで完成! 27 / 32