主頁 >  其他 > Gitlab Registries

Gitlab Registries

2023-06-03 08:02:22 其他

在專案開發和部署程序中,我們常常需要一套私有倉庫,比如 Code RepositoryPackage RepositoryDocker Registry 等,

  • Code Repository:在 github 或 gitlab 或 gitee 等平臺上創建私有專案;或搭建本地代碼服務器,一般常用 gitlab 開源版本搭建,
  • Package Registry:以 nuget 為例,官方 nuget.org 是不提供私有空間的,因此我們常用 baget(只支持 nuget)、nexus(支持多種型別)搭建私有 Package Registry,
  • Docker Registry:私有 Docker 鏡像倉庫,常用于本地構建、遠程部署場景,可使用 registry 搭建,

其實,如果你使用 Gitlab 托管代碼,那么要知道它同時也提供了 Package 和 Docker 倉儲服務,就個人而言,Gitlab 涵蓋了博主大部分專案的 CI/CD 主環節,不需要額外對接第三方服務,

Package Registry

下面以 nuget source 為例,在 gitlab.com 上搭建 Package Registry:

  1. 新建一個空專案或使用現有專案(專案中包含什么無關緊要),得到它的 Project ID,我們的 nuget source 就是 https://gitlab.com/api/v4/projects/{Project_ID}/packages/nuget/index.json,

  2. 創建該專案或該專案所屬 groupDeploy Token,得到相應的用戶名和密碼,用于登錄并管理 nuget source,

  3. 在 gitlab.com 中打開源代碼專案(該專案將打包 .nupkg 檔案并發布到 nuget source,不一定要是前兩步中的專案)的 CI/CD 選項,添加兩個變數—— CI_PKG_DEPLOY_USERCI_PKG_DEPLOY_PASSWORD ——分別對應第 2 步的用戶名和密碼,當然變數名可以隨意取,

  4. 創建 gitlab-runner (假設以 docker 方式,下同)并撰寫 .gitlab-ci.yml 到源代碼專案中,注意其中用到第 3 步添加的變數,

image: mcr.microsoft.com/dotnet/sdk:6.0 # 默認每次 runner 執行時都會重新拉取鏡像,可在 config.toml 中設定 pull_policy = "if-not-present",本地沒有時再拉取

stages:
  - deploy

deploy domain:
  stage: deploy
  script:
    - dotnet build -c Release xxx/xxx.csproj  # 微軟官網說 dotnet pack(不帶 --no-build) 會先自動 build,實則不然,所以加了這句
    - dotnet pack --no-build -c Release Domain/Domain.csproj
    - dotnet nuget add source "${CI_API_V4_URL}/projects/123456/packages/nuget/index.json" --name gitlab --username $CI_PKG_DEPLOY_USER --password $CI_PKG_DEPLOY_PASSWORD --store-password-in-clear-text # .net 平臺暫不支持該場景下的密碼加密,所以配置為明文傳輸
    - dotnet nuget push "xxx/bin/Release/*.nupkg" --source gitlab
  rules:  # 至少從 Gitlab 16.0 起,`only` and `except` are not being actively developed. `rules` is the preferred keyword to control when to add jobs to pipelines.
    - if: $CI_COMMIT_BRANCH == "master"
      changes: 
        - "xxx/**/*"    
  environment: production  # 這個配置主要用于歸類,關系不大
  tags: # job 一定要指定 tags,不是說留空就會執行默認全部 runners,
    - demo

注意其中腳本因未涉及到 docker 指令,所以此處不需要 Docker-in-Docker(參看gitlab-runner 中的 Docker-in-Docker),

  1. 提交源代碼專案,觸發執行 pipeline

  2. 添加 nuget source

dotnet nuget add/update source gitlab -s https://gitlab.com/api/v4/projects/123456/packages/nuget/index.json -u deploy_name -p deploy_token

其中引數 -u deploy_name -p deploy_token 同樣是之前創建的 Deploy Token

現在,就能在新的 nuget source 上找到剛發布的 xxx.version.nupkg,

ps:You can store different package types in one GitLab project,

nuget.config

有時需要在腳本中指定 nuget source,比如 dotnet restore "demo/demo.csproj" --configfile "nuget.config",如果涉及到用戶名密碼認證,那么需要 nuget.config 提供相關資訊,如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<packageSources>
		<add key="nuget" value="https://api.nuget.org/v3/index.json" />
		<add key="gitlab" value="https://gitlab.com/api/v4/projects/123456/packages/nuget/index.json" />
	</packageSources>
	<packageSourceCredentials>
		<gitlab>
			<add key="Username" value="https://www.cnblogs.com/newton/p/xxxxxx" />
                        <!-- password,加密密碼僅在 Windows 上受支持,并且僅當在同一臺計算機上使用并且通過與原始加密相同的用戶進行解密;所以我們一般只能使用 ClearTextPassword,建議采用環境變數的方式提高安全性 -->
			<add key="ClearTextPassword" value="https://www.cnblogs.com/newton/p/xxxxxx or %env_name%" />
		</gitlab>
	</packageSourceCredentials>
</configuration>

Docker Registry

一般來說,生成的鏡像保存在對應的專案中即可,不必像 Package Registry 一樣考慮存放位置,下面以博主實際專案中的 .gitlab-ci.yml 為例介紹 Docker Registry 的使用,

variables:
 # 定義鏡像名稱和 tag,這里使用 $CI_REGISTRY_IMAGE 和 $CI_COMMIT_REF_NAME 兩個預定義變數表示,形如 registry.gitlab.com/group/project:master
 IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME

# 定義兩個 job
stages:
 # 生成鏡像然后發布到 Docker Registry
 - build then push docker image
 # 從 Docker Registry 拉取鏡像并創建容器
 - pull docker image to deploy

build:
 stage: build then push docker image
 # Docker in Docker,官方建議顯式指定相同版本號,以免版本不一致導致的兼容性問題,
 image: docker:20.10.16
 services:
  - docker:20.10.16-dind
 script: 
  # 1. 登錄到 Docker Registry,如果專案代碼是由 gitlab 托管,那么照搬該句即可,句中的變數會自動賦值,必定登錄成功
  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  # 2. 生成鏡像
  - docker build -f Project/Dockerfile -t $IMAGE_TAG .
  # 3. 推送鏡像,自動推送至鏡像名中的 Docker Registry 地址,
  - docker push $IMAGE_TAG
 after_script:
  # 4. 洗掉本地鏡像
  - docker rmi $IMAGE_TAG
 tags:
  - demo

deploy:
 stage: pull docker image to deploy
 image: ubuntu:latest
 before_script: # ssh 密鑰設定,事先在待部署的服務器上安裝公鑰,臨時容器(這里是 ubuntu)中設定私鑰(具體設定腳本此處略過不表)
 script:
  # 登錄服務器并執行相關指令,注意先洗掉舊容器和鏡像
  - ssh root@SERVER_IP "docker stop demo; docker rm demo; docker rmi $IMAGE_TAG; docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY; docker pull $IMAGE_TAG; docker run -d --name demo -p 443:443 -p 80:80 -e ASPNETCORE_ENVIRONMENT=Production -e ASPNETCORE_URLS="https://+;http://+" $IMAGE_TAG; docker logout"
 tags:
  - demo

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/554160.html

標籤:其他

上一篇:軟體測驗工程師如何從功能測驗轉成自動化測驗?經驗分享篇

下一篇:返回列表

標籤雲
其他(160234) Python(38199) JavaScript(25473) Java(18184) C(15236) 區塊鏈(8269) C#(7972) AI(7469) 爪哇(7425) MySQL(7223) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5346) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4581) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1980) 功能(1967) Web開發(1951) HtmlCss(1951) C++(1928) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1879) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • Gitlab Registries

    在專案開發和部署程序中,我們常常需要一套私有倉庫,比如 `Code Repository`、`Package Repository`,`Docker Registry` 等。 + Code Repository:在 github 或 gitlab 或 gitee 等平臺上創建私有專案;或搭建本地代碼 ......

    uj5u.com 2023-06-03 08:02:22 more
  • 軟體測驗工程師如何從功能測驗轉成自動化測驗?經驗分享篇

    隨著測驗行業的發展,"會代碼"越來越成為測驗工程師的一個標簽。打開各大招聘網站,測驗工程師月薪一萬以上基本都有一個必備技能,那就是自動化測驗。那么自動化測驗到底難不難呢?下面我將會將我的經歷講給大家聽,希望聽完后,大家會有自己的一個判斷。 ......

    uj5u.com 2023-06-03 08:01:57 more
  • 學習筆記——VMWare的使用和Windows的安裝

    2023-06-02 一、VMware介紹 1.1 VMware即虛擬機軟體,用于模擬計算機(虛擬機/客戶機) 物體機(是實實在在的計算機) (1)特點 ①多啟動系統 一個時刻只能運行一個系統,切換時必須重啟。 ②虛擬PC軟體 一臺機器上同時運行多個系統 二、在虛擬機中安裝作業系統 2.1 安裝前的 ......

    uj5u.com 2023-06-03 08:01:37 more
  • 軟體測驗作業3年,我是如何從剛入門進階到自動化測驗的?

    從事測驗作業已3年有余了,今天想聊一下自己剛入門時和現在的今昔對比,雖然現在也沒什么成就,只能說笑談一下自己的測驗生涯,各位看官就當是茶余飯后的吐槽吧,另外也想寫一寫自己的職場感想,希望對剛開始作業的小伙伴能夠有些幫助或啟發。 ......

    uj5u.com 2023-06-03 08:01:29 more
  • 學習筆記——軟體、軟體分類、軟體測驗、資料的形式與數制(進制之

    2023-06-02 一、軟體 1、軟體包含的內容:程式、資料和檔案 ①程式:一遍是由編程語言撰寫的,例如:C、C++、java、Python等。 ②資料:一般使用檔案或者資料庫來存盤資料 ③檔案:包括安裝說明書、幫助檔案、許可協議等。 2、軟體分類 2.1 安裝功能用途分類 (1)系統軟體 例如: ......

    uj5u.com 2023-06-03 08:01:18 more
  • python mitmproxy抓包庫

    一.簡介 mitmproxy是一款用Python撰寫的支持HTTP(S)的中間人代理工具。它可以攔截、查看、修改、重放和保存HTTP/HTTPS流量 ,支持命令列界面和圖形界面,可用于安全測驗、網路除錯、API開發和反向工程等場景。mitmproxy具有很高的靈活性和擴展性,可以通過插件機制進行定制 ......

    uj5u.com 2023-06-03 08:00:57 more
  • Python單元測驗:一步步了解測驗框架、測驗用例和覆寫率分析

    在軟體開發中,單元測驗是一個非常重要的環節。它可以確保你的代碼能夠正常運行,并且在將來的修改中不會出現問題。在Python中,單元測驗是非常容易實作的。本文將介紹Python單元測驗的所有知識點,包括測驗框架,測驗用例,測驗裝置,測驗套件和覆寫率分析。 ......

    uj5u.com 2023-06-03 08:00:42 more
  • 利用遠控工具橫向移動

    # 利用遠控工具橫向移動 [TOC] ## 一、利用遠控工具向日葵橫向移動 ### 1、向日葵介紹 向日葵遠程控制軟體是一款免費的集遠程控制電腦/手機/平板、遠程桌面連接、遠程開機、遠程管理、支持內網穿透的一體化遠程控制管理工具軟體,且還能進行遠程檔案傳輸、遠程攝像頭監控等。 ### 2、利用思路 ......

    uj5u.com 2023-06-03 08:00:29 more
  • QR防偽溯源系統追溯原理是什么?

    QR防偽溯源系統是一種基于QR技術的防偽技術,通過為每件產品生成唯一的QR標簽,并將其與產品資訊、生產資訊、物流資訊等進行關聯,實作產品的全程追溯。本文將從追溯原理、系統構成、應用場景等方面對QR防偽溯源系統進行詳細介紹 ......

    uj5u.com 2023-06-03 08:00:25 more
  • 2023.06 微信抓包方案 · 親測可用

    ## 使用工具 ``` Proxifier(將微信的流量轉發到Burp監聽埠) Burp Suite (實作抓包、改包的操作) 微信 ``` ##### *本文章的方案僅適用于電腦!!!!* ? ### 實操來 ? 點擊 Proxy Servers 添加代理 ![](https://img2023 ......

    uj5u.com 2023-06-03 08:00:10 more