狠狠撸

狠狠撸Share a Scribd company logo
HIDEAKI ISHIJIMA
SCM, CI and Maven Repo
自己紹介
? 石島 秀晃
? @hdkshjm
? 開発Toolの運用
? SCM, CI, Maven Repo, Deploy Toolなど
目次
? SCM: GitHub Enterprise
? CI: Jenkins
? Maven Repository: Nexus Repository Pro
まとめ
RELEASE SNAPSHOT Pull Request
SCM:
GitHub Enterprise
master branch develop branch
CI: Jenkins
groupid_artifactid_R_
master
groupid_artifactid_C_d
evelop
groupid_artifactid_PR_
branch
Maven Repo:
Nexus Pro
internal(upload) releas
es(download)
nightly(upload)
snapshots(download)
SCM: GitHub Enterprise
? サービスごとにOrganizationを作成
? Repositoryで1万以上に
? 基本的にPublic Repoで運用
? git flow, GitHub Flowを主に使用
CI: Jenkins
? 1つのJenkinsを共有
? Java App, Android App, iOS App
? build時のJDKはOracle JDKを使っている
CI: Jenkins
? Job Template
? groupid_artifactid_C_develop
? groupid_artifactid_R_master
? groupid_artifactid_PR_branch
? Viewで正規表現でList upできて便利
? (Repositoryが消滅してもJob名から推察できる)
CI: Jenkins:
groupid_artifactid_C_develop
? develop branchにpushされたらbuild開始
? SNAPSHOT Artifactを社内Maven Repoへupload
CI: Jenkins:
groupid_artifactid_C_develop
? 複数の社内libraryに依存している巨大appの場合
Skinny Warを作ることも
? Server deploy時にdependency:copy-dependencies
で、jarを./WEB-INF/libにcopyする
? dependencyがupdateされても
Warを再buildせずにServer deployだけすればよい
CI: Jenkins:
groupid_artifactid_R_master
? 手動でbuild開始
? master branchからbuildし
RELEASE Artifactを社内Maven Repoへupload
? Skinny Warは行わない
CI: Jenkins:
groupid_artifactid_PR_branch
? PRを自動でbuild(testまで)
? GitHub pull request builder pluginを使用
Repo: Nexus Repository Pro:
? 用途により3種類のRepoを管理
? 外部RepoをReverse Proxy
? Upload専用のinternal/nightly
? Download専用のreleases/snapshots
? (名前がAndroidのNexusと同じなので、検索しづらいのが
辛い)
Repo: Nexus Repository Pro:
外部RepoをReverse Proxy
? Reverse ProxyしつつCacheもしてくれる
? 2回目以降のdownloadの速度が上がるのでbuild時
間短縮
? 外部RepoがdownするとReverse Proxyも遅くなる
Repo: Nexus Repository Pro:
外部RepoをReverse Proxy
? 外部RepoがURL変更/消滅になっても、
既存のpom/build.gradleは影響ない
? URL変更: Nexus内でReverse Proxy先を変更する
? 消滅: CacheのみDownload可能なRepoとして暫く
残す
Repo: Nexus Repository Pro
upload専用のinternal Repo
? JenkinsからのみRelease Artifactをupload可能
? Local PCから間違ってuploadする事件を予防
? build方法の一子相伝の口伝継承を予防
? Maven Centralなどに存在しないArtifactについては
管理者にuploadを依頼
Repo: Nexus Repository Pro
upload専用のnightly Repo
? Local PC or JenkinsからSNAPSHOT Artifactをupload可能
? 定期的に古いSNAPSHOT Artifactは削除
? Jenkinsのgroupid_artifactid_C_developより
毎日大量にuploadされるため
? 2週間以上前に作成され
15世代以上古いtimestamped verのみ
Repo: Nexus Repository Pro
download専用のreleases/snapshots
? NexusのGroup Repo機能により
複数のRepoを、1個のRepoに統合する
? 複数のRepoにおいて同名Artifactがあった場合
Repoの優先順位を設定可能
? pomなどに複数Repo書く必要がなくなる
Repo: Nexus Repository Pro
download専用のreleases/snapshots
? 以下のRepoを統合している
? internal/nightly Repo
? 関連会社の社内Maven Repo
? Maven Centralやrepository.apache.orgなど
まとめ
RELEASE SNAPSHOT Pull Request
SCM:
GitHub Enterprise
master branch develop branch
CI: Jenkins
groupid_artifactid_R_
master
groupid_artifactid_C_d
evelop
groupid_artifactid_PR_
branch
Maven Repo:
Nexus Pro
internal(upload) releas
es(download)
nightly(upload)
snapshots(download)
Q&A
? なにかあれば

More Related Content

SCM, CI and Maven Repo

  • 1. HIDEAKI ISHIJIMA SCM, CI and Maven Repo
  • 2. 自己紹介 ? 石島 秀晃 ? @hdkshjm ? 開発Toolの運用 ? SCM, CI, Maven Repo, Deploy Toolなど
  • 3. 目次 ? SCM: GitHub Enterprise ? CI: Jenkins ? Maven Repository: Nexus Repository Pro
  • 4. まとめ RELEASE SNAPSHOT Pull Request SCM: GitHub Enterprise master branch develop branch CI: Jenkins groupid_artifactid_R_ master groupid_artifactid_C_d evelop groupid_artifactid_PR_ branch Maven Repo: Nexus Pro internal(upload) releas es(download) nightly(upload) snapshots(download)
  • 5. SCM: GitHub Enterprise ? サービスごとにOrganizationを作成 ? Repositoryで1万以上に ? 基本的にPublic Repoで運用 ? git flow, GitHub Flowを主に使用
  • 6. CI: Jenkins ? 1つのJenkinsを共有 ? Java App, Android App, iOS App ? build時のJDKはOracle JDKを使っている
  • 7. CI: Jenkins ? Job Template ? groupid_artifactid_C_develop ? groupid_artifactid_R_master ? groupid_artifactid_PR_branch ? Viewで正規表現でList upできて便利 ? (Repositoryが消滅してもJob名から推察できる)
  • 8. CI: Jenkins: groupid_artifactid_C_develop ? develop branchにpushされたらbuild開始 ? SNAPSHOT Artifactを社内Maven Repoへupload
  • 9. CI: Jenkins: groupid_artifactid_C_develop ? 複数の社内libraryに依存している巨大appの場合 Skinny Warを作ることも ? Server deploy時にdependency:copy-dependencies で、jarを./WEB-INF/libにcopyする ? dependencyがupdateされても Warを再buildせずにServer deployだけすればよい
  • 10. CI: Jenkins: groupid_artifactid_R_master ? 手動でbuild開始 ? master branchからbuildし RELEASE Artifactを社内Maven Repoへupload ? Skinny Warは行わない
  • 12. Repo: Nexus Repository Pro: ? 用途により3種類のRepoを管理 ? 外部RepoをReverse Proxy ? Upload専用のinternal/nightly ? Download専用のreleases/snapshots ? (名前がAndroidのNexusと同じなので、検索しづらいのが 辛い)
  • 13. Repo: Nexus Repository Pro: 外部RepoをReverse Proxy ? Reverse ProxyしつつCacheもしてくれる ? 2回目以降のdownloadの速度が上がるのでbuild時 間短縮 ? 外部RepoがdownするとReverse Proxyも遅くなる
  • 14. Repo: Nexus Repository Pro: 外部RepoをReverse Proxy ? 外部RepoがURL変更/消滅になっても、 既存のpom/build.gradleは影響ない ? URL変更: Nexus内でReverse Proxy先を変更する ? 消滅: CacheのみDownload可能なRepoとして暫く 残す
  • 15. Repo: Nexus Repository Pro upload専用のinternal Repo ? JenkinsからのみRelease Artifactをupload可能 ? Local PCから間違ってuploadする事件を予防 ? build方法の一子相伝の口伝継承を予防 ? Maven Centralなどに存在しないArtifactについては 管理者にuploadを依頼
  • 16. Repo: Nexus Repository Pro upload専用のnightly Repo ? Local PC or JenkinsからSNAPSHOT Artifactをupload可能 ? 定期的に古いSNAPSHOT Artifactは削除 ? Jenkinsのgroupid_artifactid_C_developより 毎日大量にuploadされるため ? 2週間以上前に作成され 15世代以上古いtimestamped verのみ
  • 17. Repo: Nexus Repository Pro download専用のreleases/snapshots ? NexusのGroup Repo機能により 複数のRepoを、1個のRepoに統合する ? 複数のRepoにおいて同名Artifactがあった場合 Repoの優先順位を設定可能 ? pomなどに複数Repo書く必要がなくなる
  • 18. Repo: Nexus Repository Pro download専用のreleases/snapshots ? 以下のRepoを統合している ? internal/nightly Repo ? 関連会社の社内Maven Repo ? Maven Centralやrepository.apache.orgなど
  • 19. まとめ RELEASE SNAPSHOT Pull Request SCM: GitHub Enterprise master branch develop branch CI: Jenkins groupid_artifactid_R_ master groupid_artifactid_C_d evelop groupid_artifactid_PR_ branch Maven Repo: Nexus Pro internal(upload) releas es(download) nightly(upload) snapshots(download)