Successfully reported this slideshow.
Your SlideShare is downloading. ×

SCM, CI and Maven Repo

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 20 Ad

More Related Content

Slideshows for you (20)

Similar to SCM, CI and Maven Repo (20)

Advertisement

Recently uploaded (20)

SCM, CI and Maven Repo

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

×