透過 GCP Storage 當 Maven Private Repository

過去架設 Nexus 來管理 Maven Repository ,每次在 Maven deploy 時就會把 jar or war 上到自建的Repository,近期開始思考一件事,如何透過 AWS or GCP 的服務來取代這個作業呢?
沒錯,我找到了一個解決方案如:https://bit.ly/2QpHVeD
主要是透過 Google storage wagon

  1. 加入 maven wagon
    它讓我可以從 GCP Storage 上傳或下載,暫時先用 1.7 版本,1.8 ~ 2.0 存在一個Bug 尚未解。
  <build>
    <extensions>
      <extension>
        <groupId>com.gkatzioura.maven.cloud</groupId>
        <artifactId>google-storage-wagon</artifactId>
        <version>1.7</version>
      </extension>
    </extensions>
  </build>
  1. 新增GCP Storage bucket
    到GCP Storage 新增一個 bucket (ex:myrepository) ,這裡將會是存放我們打包後的Jar。

  2. 設定存取此 bucket 權限
    建議新增一組Service 帳號,下載key 及設定存取權限,當然你可以用你自己的帳號。

  3. 設定你將要上傳的位置
    我們使用 myrepository 這個名稱來設定。

  <distributionManagement>
    <snapshotRepository>
      <id>my-repo-bucket-snapshot</id>
      <url>gs://myrepository/snapshot</url>
    </snapshotRepository>
    <repository>
      <id>my-repo-bucket-release</id>
      <url>gs://myrepository/release</url>
    </repository>
  </distributionManagement>
  1. 設定操作 Mavne 的 GCP 權限
    你可以透過 gcloud auth login -brief 這個指令來設定權限,或是用gcloud auth activate-service-account --key-file=#download_private_key ,當然你可以設定 GOOGLE_APPLICATION_CREDENTIALS ,相關用法可以參考 gcloud auth 相關說明。

  2. 接下來就可以開始 deploy
    執行:mvn deploy

  3. 若你有別的Project 需要使用到你打包後的Jar,你可以增加下列設定

  <repositories>
    <repository>
      <id>snapshot</id>
      <url>gs://settour-mavenrepository/snapshot</url>
    </repository>
    <repository>
      <id>center</id>
      <url>gs://settour-mavenrepository/release</url>
    </repository>
  </repositories>
  1. 若你想要直接上傳 Jar 檔案到 gcp storage
    請先 google-storage-wagon jar 檔案複制到 $maven_home\lib 下,再來透過 mvn deploy file to remote 的功能
mvn deploy:deploy-file -DgroupId=GroupId \
  -DartifactId=ArtifactId \
  -Dversion=Version \
  -Dfile=Jar File \
  -Durl=gs://你的bucket/releases

Maven 裡的 distributionManagement 指的是你要 deploy 的 remote 設定,repositories 是指你要下載 remote 設定,詳細 Maven 指令說明可以去官方查閱。
綜合上述步驟後就可以交由 GCP Storage 來管理自己的 Library。

已知問題:會有checksum異常,有人建議使用 1.8 版本,但 1.8~2.0 目前我是遇無法上傳的問題,所以先用 1.7 版本。

Related Posts

發佈留言