GitLab CI/CD 在构建 ASP.NET Core 之前从存储库中提取代码

GitLab CI/CD pull code from repository before building ASP.NET Core

我在计算机 A 上安装了 GitLab 运行ning,在计算机 B 上安装了开发环境 (Visual studio Pro),在计算机 C 上安装了 Windows 服务器。
我在计算机 C(Windows 服务器)上设置了 GitLab-Runner。我还设置了 .gitlab-ci.yml 文件以在每次提交时为 ASP.NET 核心应用程序执行构建和 运行 测试。

我不知道如何在计算机 C(Windows 服务器)上获取代码,以便构建它 (dotnet msbuild /p:Configuration=Release "%SOLUTION%")。令我困扰的是,我在网上找到的没有一个示例 .gitlab-ci.yml 在构建应用程序之前没有从 GitLab 中提取代码。为什么?

这样设置是否正确 CI/CD:

我应该使用常见的 git 命令来获取代码,还是 GitLab 运行 工程师已经这样做了?代码在哪里?

为什么 .gitlab-ci.yml 中没有人从 GitLab 拉取代码?

已编辑:

我收到错误

'"git"' is not recognized as an internal or external command

。我的解决方案是重启 GitLab-Runner。 Source.

@MilanVidakovic 解释说源是自动下载的(我不知道)。 我只剩下一个问题,就是如何获得 .sln 文件的正确路径。
这是我完整的 .gitlab-ci.yml 文件:

variables:
    SOLUTION: missing_path_to_solution           #TODO

before_script:
    - dotnet restore

stages:
    - build

build:
    stage: build
    script:
        - echo "Building %CI_COMMIT_REF_NAME% branch."
        - dotnet msbuild /p:Configuration=Release "%SOLUTION%"
    except:
        - tags

我需要为 SOLUTION 设置正确的变量。我的目录(GitLab-Runner 所在的位置)目前持有这个 folder/files:

- config.toml
- gitlab-runner.exe
- builds/
    - 7cab42e4/
        - 0/
            - web/                 # I think this is project group in GitLab
                - test/            # I think this is project name in GitLab
                    - .sln
                    - AND ALL OTHER PROJECT FILES      #Based on first look
                - testm.tmp

那么,什么是7cab42e40。或者更好的方法是如何获得我的项目结构的正确路径?有没有预定义的变量?

编辑2: 答案是CI_PROJECT_DIR

我不确定我是否完全遵循。

在每次提交时,Gitlab runner 都会将您的存储库提取到本地计算机(计算机 C)上的 C:\gitlab-runner\builds..,并且 builds/deploys或者执行您为舞台提供的任何动作。

此外,我认为没有必要再次构建源代码。如果您将计算机 C 用于跑步者和 tests/acceptance,只需让跑步者进行构建并在您的 .gitlab-ci.yaml 中添加 Artifacts 项目。 artifacts 中定义的路径将在计算机 C 上保留您的可执行文件,然后您可以将其用于任何目的。

希望对您有所帮助。

评论后编辑:

当您推送到存储库时,Gitlab CI/CD 会自动检查您的根文件夹中是否有 .gitlab-ci.yaml 文件。如果它在那里,运行器接管,解析文件并开始执行 jobs/stages.

只要文件本身有效并包含正确的作业和阶段,runner 就会(自动)获取最新的提交并执行 script 项告诉它执行的任何操作。

要验证一切正常,请转到您的 Gitlab -> CI / CD -> Pipelines,并检查发生了什么。你应该看到这样的东西:

也许您最好发布您的 .yaml 文件,您的运行程序没有获取代码的原因可能有多种。例如,您的 .yaml 标签可能与创建的运行器不匹配等。