自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在 GitLab 上構(gòu)建 CI 流水線

系統(tǒng) Linux
連續(xù)集成(CI)是指代碼變更會(huì)被自動(dòng)構(gòu)建和測(cè)試。以下是我為自己的 C++ 項(xiàng)目構(gòu)建 CI 流水線的過程。

本文介紹如何在 GitLab 上配置 CI 流水線。我在前面的文章中介紹了 基于 CMake 和 VSCodium 的構(gòu)建系統(tǒng) 和 基于 GoogleTest 和 CTest 的單元測(cè)試。本文將在此基礎(chǔ)上進(jìn)一步配置 CI 流水線。我會(huì)先演示如何布設(shè)和運(yùn)行 CI 流水線,然后再介紹如何配置它。

CI 是指提交到代碼倉庫的代碼變更會(huì)被自動(dòng)構(gòu)建和測(cè)試。在開源領(lǐng)域,GitLab 是一個(gè)流行的 CI 流水線平臺(tái)。除了作為中心 Git 倉庫外,GitLab 還提供 CI/CD 流水線、問題跟蹤issue tracking 和 容器注冊(cè)表container registry功能。

相關(guān)術(shù)語

在進(jìn)入正題之前,我先介紹在本文和 GitLab 文檔 中會(huì)遇到的常見術(shù)語。

  • 持續(xù)交付continuous delivery(CD):自動(dòng)化供應(yīng)軟件,以供隨時(shí)交付
  • 持續(xù)部署continuous deployment(CD):自動(dòng)化軟件發(fā)布
  • 流水線pipeline: CI/CD 的直接構(gòu)件,它由階段和作業(yè)構(gòu)成
  • 階段stage:一組作業(yè)
  • 作業(yè)job:某項(xiàng)需要執(zhí)行的具體任務(wù),比如編譯、單元測(cè)試等
  • 執(zhí)行器runner:實(shí)際執(zhí)行作業(yè)的服務(wù)

布設(shè) CI 流水線

在下面的章節(jié)中,我將復(fù)用以前的 示例工程。點(diǎn)擊 GitLab 倉庫頁面右上角的 復(fù)刻Fork

Fork the projectFork the project

設(shè)置執(zhí)行器

為了讓你對(duì)整個(gè)流程有所了解,我們先從在本地安裝執(zhí)行器講起。

參照?qǐng)?zhí)行器服務(wù) 安裝指南 安裝好服務(wù),然后注冊(cè)執(zhí)行器。

1、選擇 GitLab 項(xiàng)目頁面左側(cè)的 設(shè)置Settings,再選擇 CI/CD。

Select CI/CD in SettingsSelect CI/CD in Settings

2、展開 執(zhí)行器Runners 區(qū)域,關(guān)閉 共享的執(zhí)行器Shared runners

Configure runnerConfigure runner

3、在終端中運(yùn)行 gitlab-runner register,根據(jù)提示輸入以下注冊(cè)信息:

  • GitLab 實(shí)例: https://gitlab.com/ (如上圖)
  • 注冊(cè)令牌:從執(zhí)行器區(qū)域中獲取 (如上圖)
  • 描述:按需自由填寫
  • 標(biāo)簽:可以不填
  • 執(zhí)行環(huán)境:選 Shell

如果有需要,你可以在 ~/.gitlab-runner/config.toml 中修改這些配置。

4、用命令 gitlab-runner run 啟動(dòng)執(zhí)行器。你可以在 GitLab 的項(xiàng)目設(shè)置界面執(zhí)行器區(qū)域看到執(zhí)行器的狀態(tài):

Available specific runnersAvailable specific runners

運(yùn)行流水線

前面已經(jīng)提過,流水線就是一組由執(zhí)行器執(zhí)行的作業(yè)。每個(gè)推送到 GitLab 的提交都會(huì)生成一個(gè)附加到該提交的流水線。如果多個(gè)提交被一起推送,那么只會(huì)為最后一個(gè)提交生成流水線。為了演示,我直接在 GitLab 在線編輯器中提交和推送修改。

打開 README.md 文件,添加一行數(shù)據(jù):

Web editorWeb editor

現(xiàn)在提交修改。

這里注意默認(rèn)的行為是為提交新建一個(gè)分支,為了簡便起見,我們擇提交到主分支。

Commit changesCommit changes

提交后一會(huì)兒后,你就應(yīng)該改能看到 GitLab 執(zhí)行器執(zhí)行的控制臺(tái)中有輸出消息:

Checking for jobs... received job=1975932998 repo_url=<https://gitlab.com/hANSIc99/cpp\_testing\_sample.git> runner=Z7MyQsA6
Job succeeded duration_s=3.866619798 job=1975932998 project=32818130 runner=Z7MyQsA6

在 GitLab 項(xiàng)目概覽界面左側(cè)選擇 CI/CD --> 管道Pipelines,查看最近執(zhí)行的流水線:

Pipeline overviewPipeline overview

選中流水線可以在詳情界面看到哪些作業(yè)失敗了,并能查看各個(gè)作業(yè)的輸出。

當(dāng)遇到非零返回值是就認(rèn)為作業(yè)執(zhí)行失敗了。在下面的例子中我通過調(diào)用 exit 1 強(qiáng)制讓作業(yè)執(zhí)行失?。?/p>

Job overviewJob overview

CI 配置

階段、流水線和作業(yè)的配置都在倉庫根目錄的 .gitlab-ci.yml 文件中。我建議使用 GitLab 內(nèi)置的流水線編輯器,它會(huì)自動(dòng)對(duì)配置進(jìn)行檢查。

stages:
- build
- test
build:
  stage: build
  script:
    - cmake -B build -S .
    - cmake --build build --target Producer
  artifacts:
    paths:
      - build/Producer
RunGTest:
  stage: test
  script:
    - cmake -B build -S .
    - cmake --build build --target GeneratorTest
    - build/Generator/GeneratorTest
RunCTest:
  stage: test
  script:
    - cmake -B build -S .
    - cd build
    - ctest --output-on-failure -j6

文件中定義了兩個(gè)階段:build 和 test,以及三個(gè)作業(yè):build、RunGTest 和 RunCTest。其中作業(yè) build 屬于一個(gè)同名的階段,另外兩個(gè)作業(yè)屬于階段 test。

script 小節(jié)下的命令就是一般的 Shell 命令。你可以認(rèn)為是將它們逐行輸入到 Shell 中。

我要特別提及 產(chǎn)物artifact 這個(gè)特性。在示例中我定義了二進(jìn)制的 Producer 為作業(yè) build 的產(chǎn)物。產(chǎn)物會(huì)被上傳到 GitLab 服務(wù)器,并且可以從服務(wù)器的這個(gè)頁面上被下載:

Pipeline artifactsPipeline artifacts

默認(rèn)情況下,后續(xù)階段的作業(yè)會(huì)自動(dòng)下載先前階段作業(yè)生成的所有產(chǎn)物。

你可以在 docs.gitlab.com 上查看 gitlab-ci.yml 參考指南。

總結(jié)

上面只是一個(gè)最基本的例子,讓你對(duì)持續(xù)集成的一般原則有一個(gè)了解。再演示中我禁用了共享執(zhí)行器,然而這才是 GitLab 的優(yōu)勢(shì)所在。你可以在一個(gè)干凈的容器化的環(huán)境中構(gòu)架、測(cè)試和部署程序。除了使用 GitLab 提供的免費(fèi)執(zhí)行器,你也可以用自己的容器作為執(zhí)行器。當(dāng)然還有更高階的用法:用 Kubernetes 來協(xié)調(diào)調(diào)度執(zhí)行者容器,讓流水線適應(yīng)大規(guī)模使用的使用場(chǎng)景。如需進(jìn)一步了解,可以查看 about.gitlab.com。

如果你使用的是 Fedora,需要注意的一點(diǎn)是目前 GitLab 執(zhí)行者還不支持用 Podman 作為容器引擎。(LCTT 譯注:Podman 是 Fedora 自帶的容器引擎。)根據(jù) 議題issue #27119,對(duì) Podman 支持已將列上日程。(LCTT 譯注:Podman 4.2 及以上版本增加了對(duì)于 GitLab 執(zhí)行器的支持。)

把重復(fù)性的操作描述成作業(yè),并將作業(yè)合并成流水線和階段,可以讓你跟蹤它們的質(zhì)量而不增加額外工作。。特別是在大型社區(qū)項(xiàng)目中,適當(dāng)配置的 CI 可以告訴你提交的代碼是否對(duì)項(xiàng)目有改善,為你接受或拒絕合并請(qǐng)求提供依據(jù)。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2019-11-07 09:00:39

Jenkins流水線開源

2022-07-18 06:05:28

Gitlab流水線

2021-01-05 08:39:51

容器前端流水線

2017-03-02 14:12:13

流水線代碼Clojure

2021-04-29 08:55:54

GitLabDevOps項(xiàng)目

2017-03-15 10:08:26

軟件開發(fā)流水線

2017-02-28 16:00:45

DevOpsMarkdownreST

2023-05-10 15:08:00

Pipeline設(shè)計(jì)模式

2013-06-06 09:31:52

2017-02-28 15:40:30

Docker流水線Azure

2021-11-08 07:41:16

Go流水線編程

2024-01-07 12:47:35

Golang流水線設(shè)計(jì)模式

2023-04-02 21:49:10

開源Tekton

2021-06-26 14:22:34

Tekton流水線Kubernetes

2022-01-26 08:12:42

Jenkins開源流水線

2022-08-09 08:42:15

引擎方案

2019-11-07 10:02:33

開源開源工具DevOps

2021-06-28 06:32:46

Tekton Kubernetes Clone

2021-12-24 08:02:48

GitLabCI模板庫流水線優(yōu)化

2023-09-27 08:24:49

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)