【问题标题】:Using gitlab-ci to build .NET Core projects in docker在 docker 中使用 gitlab-ci 构建 .NET Core 项目
【发布时间】:2017-02-20 21:41:37
【问题描述】:

我想使用 gitlab-ci 自动化我的部署过程。我目前正在通过 ssh 手动执行此操作。步骤是:

构建:

  • dotnet 恢复
  • dotnet 发布

这给我留下了一个充满 .dll 的目录。我想将这些部署到 docker 容器中,所以我运行:

  • docker 构建
  • 码头停靠
  • 搬运工 rm
  • 码头运行

但是,我很难在同一个 .gitlab.ci.yml 文件中找到正确的方法来执行这两项操作。

我需要 microsoft/dotnet:latest 的 dotnet 工具和 docker:latest 的 docker cli 工具。

我尝试根据这些图像中的每一个设置两个阶段,但输出未共享。为了解决这个问题,我尝试使用artifact,但上传失败。

我在网上找不到任何这样的例子,所以我想知道我是否在做不应该做的事情。

【问题讨论】:

    标签: docker gitlab .net-core gitlab-ci


    【解决方案1】:

    不太清楚您为什么在构建管道中使用docker run,也不知道为什么artifact 不起作用。我们正在使用artifactdependencies 分阶段做这件事。

    无论如何,必须自定义构建图像以满足您的需求是很正常的。对于您的构建映像,您似乎需要dockerdotnet。创建一个Dockerfile,将其用作构建映像,并让它从microsoft/dotnet 继承。然后在该图像中安装docker。记得挂载在/var/run/docker.sock,这样容器就可以使用docker守护进程了。

    您的新Dockerfile 将如下所示:

    FROM microsoft/dotnet
    
    RUN echo deb http://apt.dockerproject.org/repo debian-jessie main > /etc/apt/sources.list.d/docker.list && \
    apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D && \
    apt-get update && \
    apt-get install -y docker-engine
    

    在您使用的计算机上运行映像

    docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock yournewimage
    

    您将 GitLab 配置为在运行器配置文件中挂载 /var/run/docker.sock,然后您可以在 gitlab-ci.yml 中使用新映像。

    【讨论】:

    • 我现在实际上并没有使用 docker run,因为我遇到了工件问题。但最终,我希望我的 CI 管道在每次提交到 master 时部署图像。我一定会试试你的 Dockerfile。即使有工件工作,我想我可能更喜欢这个解决方案。我现在有点忙,但我会在几天后回复您(如果可行,请接受您的回答)。
    • 感谢 Dockerfile。那部分就像一个魅力。我必须按照此处所述更改我的配置:gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/1905 我提出了与工件有关的问题。我错误地认为,只要是同一张图片,每一步都可以从上一步停止的地方继续。
    • 回到这个话题。当我找到解决方法时,我更新直接解决了这个问题。但是我确实怀疑nginx背后的gitlab是工件的问题,增加nginx的请求限制可能会解决这个问题。
    猜你喜欢
    • 2016-01-30
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2017-05-15
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多