Slide 1

Slide 1 text

KotprefをJCenterから Maven Centralに 移行した話 About migration of Kotpref from JCenter to Maven Central by chibatching @Kotlin Tech Talk, 2021/04/05

Slide 2

Slide 2 text

● chibatching ○ Androidアプリ開発 ○ Android用OSSライブラリ ■ Kotpref 自己紹介

Slide 3

Slide 3 text

JCenter ● JFrogが運営する公開Mavenリポジトリのホスティングサービス ● AndroidのOSSライブラリでも多く利用されている ● Kotprefの配布でも利用

Slide 4

Slide 4 text

JCenter 突然の死

Slide 5

Slide 5 text

Into the Sunset ● 2021/02/03 JCenter含むJFrogの公開パッ ケージホスティングサービスが5/1で 停止すると発表 ○ 5/1の停止はUIとAPI ○ ホスティング自体は2022/2/1 まで継続 https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/

Slide 6

Slide 6 text

Android界隈への影響 ● アプリ開発者 ○ JCenterへの依存を断ち切らないとビルドできなくなる ■ JCenterにだけ公開しているライブラリが 他のホスティングサービスへ移行されるのを待つ ■ 自前でローカルや社内リポジトリにパッケージを 確保しておく

Slide 7

Slide 7 text

Android界隈への影響 ● ライブラリ開発者 ○ JCenterだけに公開しているライブラリを 他のホスティングサービスに移行する必要がある ■ 新しいバージョンを公開できるのは2021/3/31まで ■ 2022/2/1には公開済みのものも参照不可

Slide 8

Slide 8 text

ライブラリ開発者として JCenterから移行した話

Slide 9

Slide 9 text

移行先の検討

Slide 10

Slide 10 text

独自ホスティング ● 自分でMavenリポジトリサーバを立てる ○ 管理が大変… ○ 利用者側でライブラリ毎にリポジトリの追加が必要 repositories { mavenCentral() jcenter() google() maven { url “https://my.library.repo/” } }

Slide 11

Slide 11 text

GitHub Packages ● GitHubが提供するパッケージホスティングサービス ○ Mavenリポジトリにも対応 ○ 利用者側でライブラリ毎にリポジトリの追加が必要 ○ GitHubへの認証も必要 repositories { maven { url “https://maven.pkg.github.com/OWNER/REPOSITORY” credentials { username = “github_user_name” password = “github_password” } } }

Slide 12

Slide 12 text

JitPack ● GitHub上のソースコードからアーティファクトを生成してくれる ● バージョン名はタグ ● デフォルトではGroup IDやArtifact IDが固定 ○ com.github.User:Repo:Tag ○ 独自ドメインにも対応しているので既存のものに合わせられる場合もある ● 初回ダウンロードが遅い ○ バージョンの初回リクエスト時にビルドするため

Slide 13

Slide 13 text

Maven Central ● Mavenパッケージホスティングサービスの重鎮 ○ JCenterと比べてパッケージの要件が厳しい ■ アーティファクトへのGPG署名必須やPOM必須項目 ○ リポジトリを作るのが少し手間らしい ■ Sonatypeへリポジトリ作成依頼のJIRAチケット作成 ■ ドメインの正当性チェック

Slide 14

Slide 14 text

移行先の検討 ● Kotprefでは移行先にMaven Centralを選定 ○ 信頼性 ○ 大変なのは最初の設定だけ(だろうという予想

Slide 15

Slide 15 text

アカウント/リポジトリの作成

Slide 16

Slide 16 text

JIRAチケットの起票 ● SonatypeのJIRAアカウントを 作成 ● 必要事項を入力してSonatypeに JIRAチケットを起票

Slide 17

Slide 17 text

ドメインの 正当性チェック ● チケットにつくBotからコメントに従っ てドメインのTXTレコードにチケット 番号を設定

Slide 18

Slide 18 text

リポジトリが 作成される ● TXTレコード浸透後10分程度で リポジトリが作成される ● すべてBotが対応してくれるので JIRAチケット起票から20分ほどで 完了

Slide 19

Slide 19 text

リポジトリにアクセスでき るようになった ● Profileからaccess tokenなどを取 得する

Slide 20

Slide 20 text

Gradle TaskやCI設定 の変更 ● bintray/gradle-bintray-plugin の廃止 ● sonatypeへのpublish情報追加 https://github.com/chibatching/Kotpref/pull/240

Slide 21

Slide 21 text

完成 

Slide 22

Slide 22 text

完成?

Slide 23

Slide 23 text

これからリリースする バージョンだけが Maven Centralに公開される

Slide 24

Slide 24 text

既存のバージョンを移行するのはかなりの手間 1. 既存のアーティファクトをすべてダウンロード 2. すべてのアーティファクトにGPG署名をつける 3. POMの不足項目をすべて埋める

Slide 25

Slide 25 text

あきらめた作者

Slide 26

Slide 26 text

救世主現る

Slide 27

Slide 27 text

https://zenn.dev/red_fat_daruma/articles/0f3a01a53dc4fd

Slide 28

Slide 28 text

● 記事で提供してくれているスクリプトが面倒な作業の大半を自動化 ○ 過去バージョンのダウンロード ○ GPG署名 ○ POMの補完 過去バージョンの移行作業

Slide 29

Slide 29 text

スクリプトを利用して 移行作業を進めていると…

Slide 30

Slide 30 text

暗雲

Slide 31

Slide 31 text

● 数十の公開作業が数分の間に行わ れて過負荷になったからBANした よ!! ○ とりあえず謝罪とアカウント復 活してもらい事なきを得る… 問い合わせ

Slide 32

Slide 32 text

まとめ ● JCenter終了に向けてアプリ開発者、ライブラリ開発者どちらも 準備を進めておきましょう ● ライブラリ開発者のJCenterからMaven Central移行は先人のおかげで だいぶ楽になっている ● スクリプトで大量の移行を行うときはMaven Centralに負荷がかからない ように注意が必要