3
0

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 1 year has passed since last update.

CircleCIAdvent Calendar 2021

Day 25

android向けQodanaをCircleCIで動かしてよしなに公開する

Last updated at Posted at 2021-12-25

CircleCI Advent Calendar 2021 25日目です(すっかり時間過ぎてしまった)

自分はandroidアプリ開発者でCircleCIを使う機会も多く、JetpackComposeのVRテスト周りをCircleCIでうまく回す方法について書くつもりでしたが想定以上にandroidの話ばっかになってしまったので題材を変更しました

Qodanaとは

QodanaとはJetbrains社が開発している静的解析ツールです
イメージとしてIDEAをはじめとするIDEに搭載されていた解析ツールをCI上で動かしやすくパッキングしたものです
現状jvm, android, php, python, javascriptに対応しており、コード最適化のsuggestやライセンスチェックをオシャンティーに解析して表示してくれます

sample

Qodanaのターゲット

Qodanaのターゲットは現状

となっており、シュッとCircleCIで使用できません
ですがQodana自体はDocker Imageとして配布されており、そちらを利用することで静的解析自体は行えます

*https://www.jetbrains.com/help/qodana/docker-images.html

CircleCI上でのQodanaの動かし方

qodana自体はdockerイメージとして配布されているためCircleCI上では通常のdockerイメージを扱う要領で使用できます

docker hubのpull limitにかからないように認証を通してあげる必要があります

job:
  page-generate:
    docker:
      - image: jetbrains/qodana-jvm-android
        auth:
          username: $DOCKERHUB_USERNAME
          password: $DOCKERHUB_PASSWORD
    steps:
      - checkout
      - run:
          name: run qodana
          command: |
            qodana --save-report -r docs
      - persist_to_workspace:
          root: .
          paths:
            - ./docs

Qodanaの成果物の配布方法

Qodanaの成果物は静的htmlとして配布できます
そこでgithub pagesに公開する、もしくはCircleCIのビルドアーティファクトとして一時的に公開するのが現状のCircleCIでの使い方かなと考えました

GitHub Page

先述のjobで生成したhtmlファイルをワークスペース経由で取り込み、github page用のブランチをチェックアウトしてそちらにコミットするだけです

ワークスペース経由でhtmlファイルをやり取りしている理由はqodanaのdockerイメージにはgitが含まれていないため、コミットできないからです

jobs:
  page-deploy:
    docker:
      - image: cimg/base:2021.12
    steps:
      # githubページへの公開はwrite権限のあるdeploy keyが必要
      - ssh_key_setup
      - checkout
      - run:
          name: setup git
          command: |
            git config --global user.name "Circle CI"
            git config --global user.email "<>"
      - run:
          name: setup page branch
          command: |
            git pull origin main
            git fetch origin page
            git checkout page
            # ページ用ブランチのpushでCIが走らないようにコメントを設定
            git merge -m "[skip ci] tracking main" main
            rm -rf ./docs
      - attach_workspace:
          at: .
      - run:
          name: github page publish
          command: |
            git add .
            git commit -m "[skip ci] update qodana page"
            git push

こちらはSampleで実際に生成されているGitHub Pageを確認できます
(GitHub Actions使えばいいじゃんという火の玉ボールはやめて・・・・・)

ビルドアーティファクト

CircleCIには生成物を一時保存するビルドアーティファクトという仕組みがあります

こちらを利用すると一時的に配布するバイナリやhtmlの確認がスムーズに行える(30日間で消える)ため非常に重宝しています

永続的なプロジェクトの状態を示すページとして使わない(一般的なlint等に使用する)のであればこちらを利用するのが便利かなと思いました

orbs:
  gh: circleci/github-cli@1.1.0

jobs:
  page-store:
    docker:
      - image: cimg/base:2021.12
    steps:
      - attach_workspace:
          at: .
      - store_artifacts:
          path: .
      - gh/setup
      - run:
          name: comment to pr
          command: |
            if [ -n "${CI_PULL_REQUEST}" ]; then
              gh pr comment $CI_PULL_REQUEST -b ${CIRCLE_BUILD_URL}/artifacts/0/docs/index.html
            fi

先述の用途として使用する際にCircleCIのWebをいちいち開いてartifactのタブを開いて、というのは大変だと思うのでgithubであればプル陸のコメントにトップページへのリンクをコメントするようにしてあげると便利になりそうです

おわりに

CircleCIのビルドアーティファクトは本当に便利(認証制御、htmlも表示してくれる)なのでもっと活用していきたいです
ワタシハサークルシーアイチョットデキルを身にまとえるようになりたいですね・・・・

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?