Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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_
ma...
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
• V...
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-...
CI: Jenkins:
groupid_artifactid_R_master
• 手動でbuild開始
• master branchからbuildし
RELEASE Artifactを社内Maven Repoへupload
• Skinn...
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/sn...
Repo: Nexus Repository Pro:
外部RepoをReverse Proxy
• Reverse ProxyしつつCacheもしてくれる
• 2回目以降のdownloadの速度が上がるのでbuild時
間短縮
• 外部Rep...
Repo: Nexus Repository Pro:
外部RepoをReverse Proxy
• 外部RepoがURL変更/消滅になっても、
既存のpom/build.gradleは影響ない
• URL変更: Nexus内でReverse ...
Repo: Nexus Repository Pro
upload専用のinternal Repo
• JenkinsからのみRelease Artifactをupload可能
• Local PCから間違ってuploadする事件を予防
• b...
Repo: Nexus Repository Pro
upload専用のnightly Repo
• Local PC or JenkinsからSNAPSHOT Artifactをupload可能
• 定期的に古いSNAPSHOT Artifa...
Repo: Nexus Repository Pro
download専用のreleases/snapshots
• NexusのGroup Repo機能により
複数のRepoを、1個のRepoに統合する
• 複数のRepoにおいて同名Arti...
Repo: Nexus Repository Pro
download専用のreleases/snapshots
• 以下のRepoを統合している
• internal/nightly Repo
• 関連会社の社内Maven Repo
• Ma...
まとめ
RELEASE SNAPSHOT Pull Request
SCM:
GitHub Enterprise
master branch develop branch
CI: Jenkins
groupid_artifactid_R_
ma...
Q&A
• なにかあれば
Upcoming SlideShare
Loading in …5
×

SCM, CI and Maven Repo

1,717 views

Published on

Java Casual #2の発表資料です
http://java-casual.connpass.com/event/42461/

Published in: Engineering
  • Be the first to comment

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 • なにかあれば

×