理系学生日記

おまえはいつまで学生気分なのか

gitlab

GitLabにもSecret Detectionがある

世の中パスワードやアクセスキーといったSecretを公開リポジトリにPUSHしてしまうというような事故が起きます。GitHubにはSecret Scanningという機能があり、PUSHされた内容をスキャンしてSecretを検出できます。 もちろんGitLabにも同様の機能があり、Secre…

GraphQLでMerge Request上のコメントを抽出する

モチベーション 品質管理の負荷を下げたい TypeScript/GraphQLを使ってみたい GraphQL+TypeScriptの組み合わせがとてもよかった 開発プロジェクトでGitLabを使っている場合、 Merge Requestを使って開発を進めていくことが多いでしょう。 このときMerge Requ…

GitLabでJavaのソースコードのテストカバレッジを可視化する

テストを書こうと言っても、精神論ではなかなかその文化は育ちません。 これを行おうとすると、自分の記述したテストがどのようにプロジェクトやチームに貢献しているのかを可視化する必要があります。 今日のゴールは2つあり、1つはMerge Requestのファイル…

Checkstyle、SpotBugsのエラー(Violation)を、Reviewdogを使ってGitLabのMergeRequestにコメントする

CheckstyleやSpotBugsのエラーを、Reviewdogを使ってGitLabのMerge Requestにコメントできるようにしました。 それぞれハマりポイントがあって、かなり苦戦しました。このため、それぞれに関する内容を記載しておきます。 Checkstyle Reviewdog自体はネイテ…

ReviewdogをGitLabで使うときに`failed to get merge-base commit`が発生する

CIで実行した静的解析の結果をMerge Requestのコメントとして書き込みたいというニーズは多くあります。 これを容易に叶えてくれるプロダクトがreviewdogです。 問題 このreviewdogをGitLab CI/CDに設定したのですが、以下の様なエラーが出て失敗してしまう…

GitLabでMavenのローカルリポジトリをcacheしようとすると`WARNING: .m2/repository: no matching files`でキャッシュが効かない

問題 GitLabを使ってJavaのプロジェクトのCIを回す時、Mavenによるアーティファクトのダウンロード時間が問題になります。 CIにおいては、これはMavenのローカルリポジトリをキャッシュすることによって解決される問題です。 ぼくは.gitlab-ci.ymlに以下の様…

GitLab CI/CDのCode QualityでCheckstyleのレポートを表示する

何をするにも「わかりやすく表示する」というのは重要です。 Checkstyleについても、その結果をGitLabやGithubでわかりやすく表示できれば、「これは直さないと」とチーム内で共有できるでしょう。 GitLabでCheckstyleのレポートを表示できるようにする 実現…

GitLab CI/CDでMarkdownファイルをdocxファイルに変換し、Generic Packages Repositoryにアップロードする

手動でいちいちpandocを実行するのは面倒です。 Merge Requestの作成やそのbranchに変更が入ったタイミングで、Markdownファイルをdocxファイルに変換し、リポジトリにアップロードしたい。 実際にこれを実装すると、以下のようにMerge Requestに紐づく形で…

GitLab CI/CDで生成したファイルをGeneric Packages Repositoryに配置する

GitLabにはPackage Registryという機能があり、様々な言語のパッケージをホストできます。 Maven packages in the Package Repository | GitLab npm packages in the Package Registry | GitLab PyPI packages in the Package Registry | GitLab 一方で、言…

Golangのファイル差分におけるコードカバレッジの強調表示をGitLabで実現する

テスト文化を作るためには、自分の書いたコードのどこがテストされているのかを明示するのも意味があります。人は「ここがテストされていないよ」と言われたら、テストしたいと考えるものだからです。知らんけど。 誰もが見える場所にカバレッジなどの数値を…

GolangのカバレッジをGitLabのMerge Requestに表示させたい

マネジメントを行う上では以下のような取り組みが重要です。 何らかの定量指標を収集し、目標を設定する その数値を誰もが見る場所に置く これはテスト文化を作るときにも例外ではありません。 「テストを書こう」といくら啓蒙したところで、ぼくの経験上効…

GitLabでdevelop -> masterへの反映Merge Requestをスクリプトで作成する

プロジェクトでは、develop branchで開発を行い、本番リリースあるいは公開するときにmaster branchへ反映するというフローをとっています。 このとき、develop branch上で不要なファイルを削除したり、ドキュメント中の特定の単語を置換した上でmasterに反…

GitLab CI/CD から ECR への PUSH

GitLab CI/CD から ECR へ PUSH するところを作りました。つらみがあって大変に時間を溶かしました。 alpine ベースの Docker Image に AWS CLI v2 をインストールするのがつらい Docker のバグを引いてしまって GitLab CI/CD 上での DinD がうまく動かなか…

GitLab CI/CD で textlint を実行する

きちんとしたガイドを書く、そしてそのガイドを多人数で変更するというケースでは、文章の揺れ等をで きるだけ防ぎたい。 このため、GitLab CI/CD で textlint を導入したい。 textlint 用 Docker Image の作成 フィルタ ルール Docker Image の build、push…

markdown を lint する

様々なドキュメントが Markdown で表現される今日このごろです。 多数の人が関わりつつドキュメントを成長させるのであれば、 Markdown ドキュメントについてもフォーマットを統一させたいものですね。 Markdown についても当然のように linter があるので、…

module に対する terraform validate が "The argument "region" is required, but was not set." エラーで失敗する

GitLab CI/CD を使い、自作の AWS 用 terraform モジュールに対して terraform validate をかけようとすると、以下のエラーメッセージが出て失敗しました。 Error: Missing required argument The argument "region" is required, but was not set. 原因 対…

GitLab CI/CD で terraform ファイルに tflint をかける

Terraform のスクリプトにも lint を自動で実行できるようにします。 lint ツール TFlint 設定の渡し方 GitLab CI/CD への組み込み 今後 lint ツール Terraform には terraform validate コマンドがあり、設定上のかなりの問題を検知してくれます。 一方で t…

「GitLab 実践ガイド」を読んだ

GitLab 実践ガイドを読みました。 GitLab実践ガイド impress top gearシリーズ作者:北山 晋吾インプレスAmazon 全体を通して プロダクトの長所 オールインワン CI/CD SaaS でもオンプレでも 最後に 全体を通して GitLab はこれまで使ったこともなく、全体的…