[教學] 建立 GitLab 私人 Composer Package Registry

在開發 php 程式會使用 composer 來安裝套件,開源的 package 會發佈在 packagist.org 上,不過公司商業用途或是私人的則不會放在這,可以選擇使用 VCS 方式或是架設私人的 packagist,但是如果選擇 VCS 就需要在所有安裝到該 package 的每個 repo 寫上 VCS 設定 (包括間接安裝),而架設 packagist 則是需要額外管理的成本,現在 GitLab 已提供多個語言的 Package Registry,其中包括了 PHP 的 composser,本篇將教學如何創建 GitLab 私人 Composer Package Registry。

建立 Group

Package Registry 會是管理在 Group 中,首先在 GitLab 中建立一個 Group

在 Group 下建立要放到 registery 的 project

接著到 Group 下建立一個要放到 Registery 的 project

並且把自己相關程式碼與 composer.json 推上去 (以下為範例)

composer.json 內容:

{
    "name": "xenby/library-a",
    "require": {
        "illuminate/database": "^8.6"
    },
    "autoload": {
        "psr-4": {
            "Xenby\\LibraryA\\": "src"
        }
    }
}

建立 Publish 用的 Personal Access Tokens 與 CI

接著到 Personal Acess Tokens 頁面 (https://gitlab.com/profile/personal_access_tokens) 建立提供 CI 使用的 token

建立完成後會取得 access token

※ 注意:這時需要把 token 複製下來 (頁面關閉後無法再看見,需要重新建立)

接著到專案的 CI/ CD 設定頁

到 Variables 中點 [Add Variable]

把剛剛的複製的 token 貼上去,變數名稱設定為 DEPLOY_TOKEN

並且勾選下方的 Mask variable (避免這個 token 被紀錄在 log 中)

接著在專案的 .gitlab-ci.yml 中加上 deploy_composer 的步驟

這樣就可以在 repo 被打上 tag 時候也自動註冊在 Composer Registry 中

image: php:7.3

deploy_composer:
  only:
    - tags
  stage: test
  script:
    - curl -sS --show-error --fail --data tag=${CI_COMMIT_TAG} "https://__token__:${DEPLOY_TOKEN}@gitlab.com/api/v4/projects/${CI_PROJECT_ID}/packages/composer"

下一篇將教學如何讓 composer 能夠存取該 package registry : [教學] composer 如何使用 Gitlab 上的私人 Registry