iT邦幫忙

0

Gitlab CI Artifacts 部屬疑問

  • 分享至 

  • xImage

情境說明: 目前在下是以 gitlab ci 呈現 pipline,想詢問大大們是怎麼透過 runner 將 build result 透過 artifacts 上傳至 server呢? (這個專案是個前端專案)。

自己目前有想到透過 sshpass的做法把build result 上傳至server 但還是想知道有沒有其他的做法呢

wiseguy iT邦超人 1 級 ‧ 2024-03-04 08:08:05 檢舉
請估狗 ansible 部署
墨嗓 iT邦研究生 4 級 ‧ 2024-03-05 00:53:52 檢舉
先確認你可以用什麼樣的「協定」做傳輸?
GitLab Server 跟你說的目的端 Server 是不是同一台?
有什麼樣的 Runner?
什麼樣的 Artifacts ?
存放的目的是什麼?

這些多少都會影響到選擇的方案。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
熊熊工程師
iT邦研究生 2 級 ‧ 2024-03-07 09:50:20

From GPT (蠻實用的感覺):

在 GitLab CI/CD 流程中,將構建結果(build result)作為 artifacts 上傳至伺服器是一個常見的需求,尤其對於前端專案來說,這能夠讓你輕鬆地部署最新的網站版本。使用 sshpass 進行檔案傳輸確實是一種可行的方法,但除此之外,還有其他一些方法可以達到類似的目的。以下是一些推薦的方法:

使用 SFTP 或 SCP 命令

除了 sshpass,你可以直接在 GitLab CI 腳本中使用 SCP(安全複製協定)或 SFTP(SSH 文件傳輸協定)命令來上傳檔案。这两种方法都需要 SSH 連線信息,但是相比直接使用 sshpass,它們提供了更標準的安全檔案傳輸機制。为了安全起见,建议使用 SSH 金鑰进行身份验证,而不是密码。

利用 Rsync

Rsync 是一個更靈活的檔案同步工具,它可以只同步變更過的檔案,從而節省時間和帶寬。在 GitLab CI 中使用 rsync,可以有效地將構建產物同步到遠端伺服器上。和 SCP 以及 SFTP 一樣,rsync 也可以配置為使用 SSH 金鑰進行連線。

使用 GitLab Deploy Tokens 或 SSH 金鑰

若要提升安全性,可以在伺服器上設定 SSH 金鑰認證,並在 GitLab 中使用 Deploy Tokens 或 CI/CD 變數來存儲這些金鑰。這樣一來,在 CI 腳本中就可以不需明文保存密碼,從而安全地進行檔案傳輸。

利用外部部署工具或服務

考慮使用如 AnsibleChefPuppet 等配置管理和自動化部署工具,或是依賴於雲服務提供商的 CI/CD 工具(如 AWS CodeDeploy、Google Cloud Build 等)。這些工具和服務通常提供了一套更完善的安全和部署流程,可以直接與 GitLab CI 集成。

示例 GitLab CI 腳本片段:

以下是一个简单的示例,展示如何在 .gitlab-ci.yml 文件中使用 SCP 命令上传 artifacts:

deploy:
  stage: deploy
  script:
    - scp -i $SSH_PRIVATE_KEY_PATH ./path/to/build/folder/* username@yourserver.com:/path/to/destination/folder
  only:
    - master

在这个例子中,$SSH_PRIVATE_KEY_PATH 是一个 CI/CD 变量,你需要在 GitLab 中提前设置好,指向你的私钥文件路径。同样,确保你的服务器已配置好对应的公钥认证。

选择哪种方法取决于你的具体需求、安全考虑以及环境配置。建议评估每种方法的优缺点,并选择最适合你项目和工作流程的方案。

我要發表回答

立即登入回答