如何使用極狐GitLab 軟件包倉庫功能托管 terraform?

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有:

  • 極狐GitLab 中文文檔
  • 極狐GitLab 中文論壇
  • 極狐GitLab 官網

Terraform 模塊庫 (BASIC ALL)


  • 基礎設施倉庫和 Terraform 模塊倉庫合并到單個 Terraform 模塊倉庫功能引入于極狐GitLab 15.11。
  • 對于群組的支持引入于極狐GitLab 16.9。

借助 Terraform 模塊庫,您可以將極狐GitLab 項目用作 Terraform 模塊私有庫。您可以使用極狐GitLab CI/CD 創建和發布模塊,然后可以從其他私有項目中使用這些模塊。

查看 Terraform 模塊


  • 對于 Readme 文件的支持引入于極狐GitLab 17.2。

查看項目中的 Terraform 模塊:

1.進入項目。
2.在左側邊欄中,選擇 軟件包和鏡像庫 > Terraform 模塊

您可以在此頁面上搜索、排序和過濾模塊。
有關如何創建和上傳軟件包的信息,請查看適用于您的軟件包類型的極狐GitLab 文檔:

Terraform 模塊庫身份驗證


要對 Terraform 模塊庫進行身份驗證,您需要:

  • 至少具有 read_api 權限的個人訪問令牌。

  • CI/CD 作業令牌。

  • 一個具有 read_package_registry 或/和 write_package_registry 范圍的部署令牌。

不要使用此處記錄的方法以外的身份驗證方法。將來可能會刪除未記錄的身份驗證方法。

發布 Terraform 模塊


當您發布 Terraform 模塊時,如果它不存在,則會創建它。
先決條件:

  • 頂級命名空間中必須不存在具有相同名稱和版本的包。
  • 您的項目和組名稱不得包含點 (.)。例如,source = "gitlab.example.com/my.group/project.name"
  • 您必須使用 API 進行身份驗證。如果使用部署令牌進行身份驗證,則必須使用 write_package_registry 范圍進行配置。
  • 除非允許重復的 Terraform 模塊,否則模塊名稱必須在其群組的范圍內是唯一的,否則會發生錯誤。
PUT /projects/:id/packages/terraform/modules/:module-name/:module-system/:module-version/file
屬性類型是否必需描述
idinteger/stringyesID 或項目的 URL 編碼路徑。
module-namestringyes模塊名稱。支持的語法:1 到 64 個 ASCII 字符,包括小寫字母 (a-z)、數字 (0-9) 和連字符 (-)。
module-systemstringyes模塊系統。支持的語法:1 到 64 個 ASCII 字符,包括小寫字母 (a-z)、數字 (0-9) 和連字符 (-)。查看更多信息:Terraform Module Registry Protocol documentation。
module-versionstringyes模塊版本。根據語義版本規范,它必須是有效的。

在請求正文中提供文件內容。

請注意,在以下示例中,請求必須以 /file 結尾。
如果您發送以其他內容結尾的請求,則會導致 404 錯誤 {"error":"404 Not Found"}

使用個人訪問令牌的示例請求:

curl --header "PRIVATE-TOKEN: <your_access_token>" \--upload-file path/to/file.tgz \"https://gitlab.example.com/api/v4/projects/<your_project_id>/packages/terraform/modules/my-module/my-system/0.0.1/file"

使用部署令牌的示例請求:

curl --header "DEPLOY-TOKEN: <deploy_token>" \--upload-file path/to/file.tgz \"https://gitlab.example.com/api/v4/projects/<your_project_id>/packages/terraform/modules/my-module/my-system/0.0.1/file"

示例響應:

{"message":"201 Created"
}

使用 CI/CD 模板(推薦)

  • 引入于 15.9 版本。

您可以使用 Terraform-Module.gitlab-ci.yml 或高級 Terraform/Module-Base.gitlab-ci.yml CI/CD 模板,將 Terraform 模塊發布到極狐GitLab terraform 庫:

include:template: Terraform-Module.gitlab-ci.yml

流水線包含以下作業:

  • fmt - 驗證 Terraform 模塊的格式。

  • kics-iac-sast - 測試 Terraform 模塊的安全問題。

  • deploy - 僅適用于標簽流水線。將 Terraform 模塊部署到 Terraform 模塊庫。

流水線變量

您可以使用以下變量配置流水線:

變量默認值描述
TERRAFORM_MODULE_DIR${CI_PROJECT_DIR}Terraform 項目根目錄的相對路徑。
TERRAFORM_MODULE_NAME${CI_PROJECT_NAME}Terraform 模塊的名稱。不得包含任何空格或下劃線。
TERRAFORM_MODULE_SYSTEMlocalTerraform 模塊目標的系統或提供者。例如,localawsgoogle
TERRAFORM_MODULE_VERSION${CI_COMMIT_TAG}Terraform 模塊版本。您應該遵循語義版本控制規范。

手動使用 CI/CD


要在極狐GitLab CI/CD 中使用 Terraform 模塊,您可以使用 CI_JOB_TOKEN 代替命令中的個人訪問令牌。
例如:

stages:- uploadupload:stage: uploadimage: curlimages/curl:latestvariables:TERRAFORM_MODULE_DIR: ${CI_PROJECT_DIR} # The path to your Terraform moduleTERRAFORM_MODULE_NAME: ${CI_PROJECT_NAME} # The name of your Terraform moduleTERRAFORM_MODULE_SYSTEM: local # The system or provider your Terraform module targets (ex. local, aws, google)TERRAFORM_MODULE_VERSION: ${CI_COMMIT_TAG} # Tag commits with SemVer for the version of your Terraform module to be publishedscript:- TERRAFORM_MODULE_NAME=$(echo "${TERRAFORM_MODULE_NAME}" | tr " _" -) # module-name must not have spaces or underscores, so translate them to hyphens- tar -vczf ${TERRAFORM_MODULE_NAME}-${TERRAFORM_MODULE_SYSTEM}-${TERRAFORM_MODULE_VERSION}.tgz -C ${TERRAFORM_MODULE_DIR} --exclude=./.git .- 'curl --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}"--upload-file ${TERRAFORM_MODULE_NAME}-${TERRAFORM_MODULE_SYSTEM}-${TERRAFORM_MODULE_VERSION}.tgz${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/terraform/modules/${TERRAFORM_MODULE_NAME}/${TERRAFORM_MODULE_SYSTEM}/${TERRAFORM_MODULE_VERSION}/file'rules:- if: $CI_COMMIT_TAG

要觸發此上傳作業,請將 Git 標簽添加到您的提交中。rules:if: $CI_COMMIT_TAG 定義這一點,因此不是每次提交到您的倉庫都會觸發上傳。有關在 CI/CD 流水線中控制作業的其他方法,請參閱 .gitlab-ci.yml 關鍵字參考。

允許重復的 terraform 模塊

  • 引入于極狐GitLab 16.8。
  • 在極狐GitLab 17.0 中,需要的角色從維護者更改為所有者。

默認情況下,Terraform 模塊倉庫強制對同一命名空間中的模塊名稱進行唯一性檢查。

要允許發布重復的模塊名稱:

1.在左側邊欄中,選擇 搜索或轉到 并找到您的群組。
2.選擇 設置 > 軟件包和鏡像庫
3.在 Terraform 模塊重復的軟件包 表中,關閉 允許重復 開關。
4.可選的。在 異常 文本框中,輸入匹配允許重復的包的名稱的正則表達式。

您的更改將自動保存。

您還可以通過在 GraphQL API 中啟用 terraform_module_duplicates_allowed 來允許發布重復的模塊名稱。

要允重復的特定名稱:

1.確保 terraform_module_duplicates_allowed 未啟用。
2.使用 terraform_module_duplicate_exception_regex 來定義允許重復的模塊名稱的正則表達式。

頂級命名空間設置優先于子命名空間設置。比如,如果您為群組啟用了 terraform_module_duplicates_allowed,并在子群組中禁用它,則在群組和子群組中的所有項目允許模塊名稱重復。

引用 Terraform 模塊


先決條件:

  • 您需要使用 API 進行身份驗證。如果使用個人訪問令牌進行身份驗證,則必須使用 read_api 范圍進行配置。

從命名空間中

您可以在環境變量中為 terrafrom 提供認證令牌(作業令牌、個人訪問令牌或部署令牌)。

您應該為環境變量的域名名稱添加前綴 TF_TOKEN_,將點號編碼為下劃線。

比如,當 CLI 向 jihulab.com 發送服務請求時,使用名為 TF_TOKEN_jihulab_com 的變量的值作為部署令牌。

export TF_TOKEN_gitlab_com='glpat-<deploy_token>'

此方法首選于企業實現。對于本地或臨時環境,您可能希望創建 .terraformrc%APPDATA%/terraform.rc 文件:

credentials "jihulab.com" {token = "<TOKEN>"
}

將其中的 jihulab.com 替換為您私有化部署實例的主機名。

隨后,您可以從下游 Terraform 項目中引用您的 Terraform 模塊:

module "<module>" {source = "jihulab.com/<namespace>/<module-name>/<module-system>"
}

其中,<namespace> 是 Terraform 模塊注冊倉庫的命名空間。

從項目中

要引用一個使用項目級別資源的 Terraform 模塊,您可以使用 Terraform 提供的 通過 HTTP 獲取歸檔 源類型。

您可以在 ~/.netrc 文件中為 terraform 提供認證令牌(作業令牌、個人訪問令牌或部署令牌):

machine jihulab.com
login <USERNAME>
password <TOKEN>

其中,jihulab.com 可以替換為私有化部署實例的主機名,<USERNAME> 是您的令牌用戶名。

您可以從下游 Terraform 項目中引用您的 Terraform 模塊:

module "<module>" {source = "https://gitlab.com/api/v4/projects/<project-id>/packages/terraform/modules/<module-name>/<module-system>/<module-version>"
}

如果您需要引用最新版本的模塊,您可以從源 URL 中省略 <module-version>。為了防止未來出現問題,您應盡量引用特定版本。

如果在相同的命名空間中存在重復的模塊名稱,從命名空間級別引用模塊會安裝最近發布的模塊。要引用特定版本的重復模塊,請使用 項目級別 源類型。

下載 Terraform 模塊


下載 Terraform 模塊:

1.在左側邊欄中,選擇 軟件包和鏡像庫 > Terraform 模塊。
2.選擇您要下載的模塊名稱。
3.在 活動 部分,選擇您要下載的模塊的名稱。

模塊解析工作原理


當您上傳一個新模塊時,極狐GitLab 會為該模塊生成一個路徑,例如 https://gitlab.example.com/parent-group/my-infra-package

  • 此路徑符合 Terraform 規范。
  • 路徑名稱在命名空間中必須是唯一的。

對于子組中的項目,極狐GitLab 檢查模塊名稱是否已存在于命名空間的任何位置,包括所有子組和父組。
例如:

  • 項目為 gitlab.example.com/parent-group/sub-group/my-project
  • Terraform 模塊為 my-infra-package

項目名稱在 parent-group 下所有群組的所有項目中必須是唯一的。

刪除 Terraform 模塊


在 Terraform 模塊庫中發布 Terraform 模塊后,您將無法對其進行編輯,您必須刪除并重新創建它。

要刪除模塊,您必須具有合適的權限。

您可以使用軟件包 API 或 UI 刪除模塊。

要從您的項目中刪除 UI 中的模塊:

1.在左側邊欄中,選擇 軟件包與鏡像庫 > Terraform 模塊。
2.找到要刪除的軟件包的名稱。
3.選擇 刪除

軟件包被永久刪除。

禁用 Terraform 模塊庫


Terraform 模塊庫自動啟用。

對于私有化部署實例,極狐GitLab 管理員可以禁用 軟件包與鏡像庫,系統會從側邊欄中刪除此菜單項。

您還可以刪除特定項目的 Terraform 模塊庫:

1.在您的項目中,轉到 設置 > 通用
2.展開 可視化、項目功能和權限 部分并關閉 軟件包(灰色)
3.選擇 保存更改

要重新啟用它,請按照上述相同步驟將其打開(藍色)。

故障排查


  • 發布具有重復名稱的模塊時,您可能會遇到 {"message":"A module with the same name already exists in the namespace."} 錯誤。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80003.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80003.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80003.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【QT】深入理解 Qt 中的對象樹:機制、用途與最佳實踐

深入理解 Qt 中的對象樹&#xff1a;機制、用途與最佳實踐 在使用 Qt 編程時&#xff0c;你是否注意到很多對象可以設置“父對象”&#xff1f;比如&#xff1a; QPushButton* btn new QPushButton(parentWidget);這不是簡單的層級結構&#xff0c;而是 Qt 強大而優雅的 對象…

比較入站和出站防火墻規則

組織需要仔細配置防火墻規則&#xff0c;監控網絡的傳入和傳出流量&#xff0c;從而最大限度降低遭受攻擊的風險。在有效管理入站和出站防火墻規則前&#xff0c;了解入站與出站流量的區別至關重要。 一、什么是入站流量&#xff1f; 入站流量指的是并非源自網絡內部&#xf…

Unity-Shader詳解-其五

關于Unity的Shader部分的基礎知識其實已經講解得差不多了&#xff0c;今天我們來一些實例分享&#xff1a; 溶解 效果如下&#xff1a; 代碼如下&#xff1a; Shader "Chapter8/chapter8_1" {Properties{// 定義屬性[NoScaleOffset]_Albedo("Albedo", 2…

COLT_CMDB_linux_userInfo_20250508.sh修復歷史腳本輸出指標信息中userName與輸出信息不一致問題

#!/bin/bash #IT_BEGIN #IT_TYPE3 #IT SYSTEM_LINUX_AGENTUSERDISCOVER|discovery.user[disc] #原型指標 #IT_RULE SYSTEM_LINUX_AGENTUSERGROUPID|groupId[{#USERNAME}] #IT_RULE SYSTEM_LINUX_AGENTUSERHOME|userHome[{#USERNAME}] #IT_RULE SYSTEM_LINUX_AGENTUSERNAME|user…

TCP 與 UDP報文

** TCP 與 UDP報文** 1. 引言 在網絡通信中&#xff0c;TCP&#xff08;傳輸控制協議&#xff09; 和 UDP&#xff08;用戶數據報協議&#xff09; 是兩種最核心的傳輸層協議。它們各自適用于不同的場景&#xff0c;理解其工作原理對開發高性能網絡應用至關重要。本文將詳細解…

LabVIEW燃氣輪機測控系統

在能源需求不斷增長以及生態環境保護備受重視的背景下&#xff0c;微型燃氣輪機憑借其在經濟性、可靠性、維護性及排放性等方面的顯著優勢&#xff0c;在航空航天、分布式發電等眾多領域得到廣泛應用。隨著計算機技術的快速發展&#xff0c;虛擬儀器應運而生&#xff0c;LabVIE…

基于vueflow可拖拽元素的示例(基于官網示例的單文件示例)

效果圖 代碼 <template><div style"width: 100%;height: calc(100vh - 84px)"><VueFlow :nodes"nodes" :edges"edges" drop"onDrop" dragover"onDragOver" dragleave"onDragLeave"><div cl…

筆試專題(十六)

文章目錄 相差不超過k的最多數題解代碼 最長公共子序列&#xff08;一&#xff09;題解代碼 小紅的口罩題解代碼 春游題解代碼 相差不超過k的最多數 題目鏈接 題解 1. 排序 滑動窗口 2. 為什么使用滑動窗口&#xff1f; 因為max-min < k&#xff0c;求這個區間內的數最…

技術視界 | 青龍機器人訓練地形詳解(三):復雜地形精講之臺階

在前兩篇中&#xff0c;我們依次講解了“如何創建一個地形”以及“如何將地形添加到訓練環境中”。從基礎出發&#xff0c;逐步構建機器人可交互的三維仿真環境。在機器人強化學習訓練中&#xff0c;地形的復雜度決定了策略的泛化能力&#xff0c;僅靠 jump_plat 和 jump_pit 等…

MYSQL之索引結構,為何要用B+樹

索引的目的就是為了提高查詢效率 索引的結構是B樹&#xff0c;那么說到B樹&#xff0c;必須提一下其他三種結構&#xff0c;分別是&#xff1a;二叉查找樹、平衡二叉樹、B樹 我們來看看各自的結構特征 二叉查找樹 特點:任何節點的左子節點的值都小于當前節點的值&#xff0c;右…

3.2.3 掌握RDD轉換算子 - 2. 過濾算子 - filter()

在本節課中&#xff0c;我們深入學習了Spark RDD的過濾算子filter()。filter()算子能夠通過指定的函數對RDD中的元素進行篩選&#xff0c;返回一個滿足條件的新RDD&#xff0c;通常新RDD的元素個數會比源RDD少。通過案例演示&#xff0c;我們掌握了如何使用filter()來過濾列表中…

vue3使用輪播圖組件swiper

一、在swiper的官網源碼下載地址 下載Swiper - Swiper中文網 二、官網瀏覽輪播圖類型地址 Swiper演示 - Swiper中文網 三、swiper配置參數地址 中文api - Swiper中文網 四、在vue3項目引入swiper npm install swiper 五、在vue3中使用 官網vue3中使用&#xff1a;Swiper…

MySQL優化-MySQL故障排查與監控

MySQL優化-MySQL故障排查與監控 一、MySQL監控 實時了解數據庫的運行狀態&#xff0c;通過不同的監控指標&#xff0c;識別潛在問題并進行預防。常見得到MySQL監控指標包括&#xff1a;連接數、緩存池命中率、磁盤I/O、查詢執行情況等。 1、監控數據庫狀態變量 MySQL的狀態…

【MongoDB篇】MongoDB的分片操作!

目錄 引言第一節&#xff1a;分片核心概念&#xff1a;為什么要分片&#xff1f;它是什么&#xff1f; &#x1f914;&#x1f4a5;&#x1f680;第二節&#xff1a;分片架構的“三大金剛”&#xff1a;核心組件解析 &#x1f9f1;&#x1f9e0;&#x1f6e3;?第三節&#xff…

C++ 函數類型及實用例題

請各位大佬一鍵三連支持一下 目錄 請各位大佬一鍵三連支持一下 1. 無參數無返回值函數 2. 有參數無返回值函數 3. 無參數有返回值函數 4. 有參數有返回值函數 5. 函數重載 6. 遞歸函數 7. 帶默認參數的函數 8. 內聯函數 下面我將介紹 C 中不同類型的函數&#xff0c;…

AtCoder Beginner Contest 404 A-E 題解

還是ABC好打~比ARC好打多了&#xff08; 題解部分 A - Not Found 給定你一個長度最大25的字符串&#xff0c;任意輸出一個未出現過的小寫字母 簽到題&#xff0c;map或者數組下標查詢一下就好 #include<bits/stdc.h>using namespace std;#define int long long #def…

trae ai編程工具

Trae&#xff0c;致力于成為真正的 AI 工程師&#xff08;The Real Al Engineer&#xff09;。Trae 旗下的 AI IDE 產品&#xff0c;以智能生產力為核心&#xff0c;無縫融入你的開發流程&#xff0c;與你默契配合&#xff0c;更高質量、高效率完成每一個任務。 版本差異 國內…

Web 架構之前后端分離

文章目錄 思維導圖一、引言二、前后端分離的概念代碼示例&#xff08;簡單的前后端分離交互&#xff09;后端&#xff08;使用 Python Flask 框架&#xff09;前端&#xff08;使用 JavaScript 和 jQuery&#xff09; 三、前后端分離的優勢3.1 提高開發效率3.2 代碼可維護性增強…

理解 Elasticsearch 的評分機制和 Explain API

作者&#xff1a;來自 Elastic Kofi Bartlett 深入了解 Elasticsearch 的評分機制并探索 Explain API。 想獲得 Elastic 認證嗎&#xff1f;查看下一期 Elasticsearch Engineer 培訓的時間&#xff01; Elasticsearch 擁有大量新功能&#xff0c;幫助你為你的使用場景構建最佳…

Jupyter Notebook / Lab 疑難雜癥記:從命令找不到到環境沖突與網絡阻塞的排查實錄

Jupyter Notebook / Lab 疑難雜癥記&#xff1a;從命令找不到到環境沖突與網絡阻塞的排查實錄 摘要&#xff1a; 本文記錄了一次復雜的 Jupyter Notebook / Lab 故障排查過程。從最初的“command not found”錯誤出發&#xff0c;我們深入挖掘了可執行文件存在的矛盾、conda 環…