使用 Jenkinsfile 时如何检出 Docker 容器内的存储库?

How do I checkout a repository inside a Docker container when using a Jenkinsfile?

我目前已经设法在容器内设置一个 Jenkins 文件来 运行 我的 PHP 分析。这是它的要点:

node {
    stage "Prepare environment"
        checkout scm
        def environment  = docker.build 'platforms-base'

        environment.inside {
            stage "Update Dependencies"
                sh "composer install || true"
        }
}

当这个 运行s 时,似乎 repo 被签出到主机上并且该目录被安装到 /app 目录中的 docker 容器中。 (我还没有找到任何配置,所以我不确定这是在哪里定义的。)

在同一个容器中,我在 /var/magento2 目录中安装了 Magento2。我需要 运行 在 Magento2 代码库范围内进行一些测试。这意味着我需要将当前分支签出到容器中位于 /var/magento2/vendor/myorg/mypackage/ 的特定目录中,但签出的回购似乎位于 /app.

如何在容器内的某个地方签出一个 repo?

/app 将安装在您的容器内,因为您(或您正在使用的 Dockerfile)将当前目录安装为 /app.

现在,您的代码 已经由 Jenkins 检查得很好,所以我不会从 docker 容器内部进行单独的额外检查。 Jenkins 刚刚使用正确的凭据为您检查了正确的 branch/master/tag,因此无需您自己执行。

您有三个基本选择:

  • 挂载当前目录不是/app,而是/var/magento2/vendor/myorg/mypackage/

  • 将当前目录挂载为 /app/var/magento2/vendor/myorg/mypackage/。您甚至可以使用额外的命令行选项而不是修改 Dockerfile 来执行此操作。 (这在很大程度上取决于您的开发设置)。

  • /var/magento2/vendor/myorg/mypackage/ 设为 /app 的符号链接,这也可能有效。