gpt4 book ai didi

Gitlab CI 同时在多个平台上运行

转载 作者:行者123 更新时间:2023-12-03 18:31:44 28 4
gpt4 key购买 nike

我有一个 C++ 项目,它为多个操作系统(Linux、Windows、MacOS)以及多个 CPU 架构(i386、x86_64、arm、Aarch64)编译和打包
为此,我使用 Jenkins 获取源代码并在每个系统上并行运行构建脚本。这是一个简单的工作解决方案,因为我的构建脚本处理系统差异。

现在我正在研究 Gitlab CI/CD,它有很多吸引我的地方(能够将构建脚本作为存储库的一部分,与 git repo 和票务系统很好地集成,Docker 容器的自然使用,等),但我找不到任何方法在彼此并行的多个体系结构/系统中运行相同的管道。

所以,说我的构建脚本是:

build:
stage: build
script:
- uname -m > arch.txt
artifacts:
paths:
- arch.txt

我如何告诉 Gitlab 我想同时在多个运行器/Docker 容器/系统中运行此作业?到目前为止我读过的所有文档都涉及 running multiple tests on one build , integrating multiple projectsdeploying in different environments depending on branches .到目前为止,我读过的任何内容都没有尝试进行许多单独的构建,单独测试和打包它们并报告它们的独立结果。这在 Gitlab CI/CD 上可行吗?

最佳答案

GitLab 使用“runners”来执行 CI 作业。运行器安装在您想要运行 CI 作业的任何地方,因此如果您想在多个架构上运行,那么您需要在每个架构的系统上安装运行器。 Runner 安装文档可以在这里找到:

https://docs.gitlab.com/runner/install/index.html

对于基于 Linux 的作业,通常使用 Docker 来执行作业 - 这不会提供架构灵活性,但它确实允许您使用容器化测试不同的风格和不同的软件。对于其他架构,您可能需要自己安装运行器,或者使用其他人共享的运行器。

在安装 runner 软件时,有一些关键步骤:

  • 您有机会将每个运行程序链接到您的 GitLab 项目,这意味着它将显示在项目 > 设置 > CI/CD 下的运行程序列表中。
  • 您将有机会为运行者分配“标签”。标签可用于帮助通过任意名称识别运行者或运行者组(例如,您可以添加“Windows x86_64”作为标签,或“Windows”和“x86_64”标签)。这些标签可用于作业以选择运行者。

  • 一旦你安装了你的运行者,你就可以编辑你的 .gitlab-ci.yml文件。

    GitLab CI 文件被分成“阶段”。每个阶段的作业可以并行运行。阶段名称在文件顶部定义。
    stages:
    - build
    - deploy

    每个 CI 作业都可以使用 stage: 附加到一个阶段。入口:
    build job:
    stage: build
    script:
    - echo "I am a build stage job"

    在您的情况下,您需要为要为其构建的每个架构创建多个作业。将这些附加到同一阶段将允许它们并行运行。

    要控制每个作业的运行位置,您有两种主要机制:
  • 标签 - 标签允许您将作业固定到运行者标签。您可以使用 tags: 指定多个标签形成 AND 列表的条目(例如 win 标签 AND x86_64 标签)。当该作业运行时,GitLab 将找到一个具有所有必需标签的运行器,并在那里运行该作业。
  • 图像 - 在 Docker/Kubernetes 上运行时,您可以指定一个 docker 图像以供运行器使用。要使用 docker 镜像,您首先需要指定一个可以运行 docker 镜像的运行器(例如 docker-in-docker 或 kubernetes runner),例如,它可能被标记为 dockerkubernetes .然后你使用 image:用于指定 docker 镜像的条目。

  • 这是一个同时显示标签和图像的示例:
    build win x86_64:
    stage: build
    tags:
    - win
    - x86_64
    script:
    - echo "I am a build stage job for win x86_64"

    build win 32:
    stage: build
    tags:
    - win
    - 32-bit
    script:
    - echo "I am a build stage job for win 32"

    build debian:
    stage: build
    tags:
    - docker
    image: debian:stretch
    script:
    - echo "I am a build stage job for debian, running on docker using debian:stretch image"

    目前不支持动态作业,也不支持在多个运行器/架构上运行一个作业,因此这需要一些手动操作。从积极的方面来说,它使 GitLab CI 文件易于阅读,并且易于查看在 CI 执行期间将运行的内容。

    关于Gitlab CI 同时在多个平台上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52031860/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com