2022年7月5日火曜日

Git 2.37.0 で FSMonitor daemon が追加されたことで status が早くなったそうです

むかーし以下の記事で git status が遅かったのが submodule 巡回のせいだったので ignoreSubmodule=dirty で改善したよって記事(※)を書いたのですが、Git 2.37.0 で追加された FSMonitor で速度が大幅改善するそうです。

ブログズミ: git gc --aggressive するそのまえに
Improve Git monorepo performance with a file system monitor | The GitHub Blog

core.fsmonitor と core. untrackedcache を true にすると FSMonitor が有効になり、git status が爆速になるらしい。
試してみたところたしかに速くなってました。9秒だったのが2秒くらい。
(初回はキャッシュ構築するので今まで変わらない速度、2回目以降速くなる)
ちなみに git status --ignore-submodule=dirty だと 0.1秒くらいです。。

まぁこのへんはどんな repository なのかやマシン環境で違うとは思いますが、FSMonitor でたしかに速くなってたので有効にしておきたいと思います。
では。


※自分のブログに書いたほうは、パフォーマンス情報を出力してなんで git コマンドが遅いのか調べて解決しようねって内容で、ignoreSubmodule=dirty の話はおまけではある。


2022年6月29日水曜日

【DockerHub】typo して間違った repository に push してしまった Docker image を正しい repository にコピーした

docker に push する先を typo してたまま CI 回しててしばらくずっと間違ったところに push してました。

oneapi が正しかったのに openapi ってなってました。
ここで今までビルドしたイメージを openapi から oneapi の方に移したいなと思ったのですが、これをやる場合 openapi から pull して oneapi に push するだけではあるのですが、すべてのタグでやるのはめんどくさかったのでスクリプトにしました。


./docker-cp-repo.sh srzzumix/openapi-cxx srzzumix/oneapi-cxx

のように使います。
jq 使うと repository のタグ一覧が簡単に取れるので便利です。
今回は以上。では。

2022年6月24日金曜日

Jenkinsfile の checkout gitSCM で LFS Pull のタイムアウト設定

【Jenkins】ERROR: Timeout after 10 minutes - コガネブログ

hudson.plugins.git.GitException: Command "git lfs pull origin" returned status code 143:

ゲーム開発してると git lfs においてるファイルが大きくなりがちで、タイムアウトで取得失敗することもあるかと思います。
そういう場合は↑のブログにある通り、チェックアウトのタイムアウトを延ばせば解決します。
これは git lfs pull が checkout の拡張として実装されているからです。
https://javadoc.jenkins.io/plugin/git/hudson/plugins/git/extensions/impl/GitLFSPull.html

Jenkinsfile の場合は以下のようにします。
CloneOption にも timeout 設定がありますが、これはその名の通り clone するときのタイムアウトなので git lfs pull には効果ありません。

checkout(
    scm: [$class: 'GitSCM',
        extensions: [
            [$class: 'GitLFSPull'],
            [$class: 'CheckoutOption', timeout: 30],
            [$class: 'CloneOption',
                timeout: 30,
            ],
            ...
        ],
    ]
)

大分前に調べたのですが、すっかり忘れてたので備忘録として残しておきました。