GitLab CI / CD-部署映像

时间:2020-09-10 14:13:40

标签: docker gitlab

我在GitLab CI / CD上遇到问题。我尝试构建映像并运行到我有跑步者的服务器上。我的gitlab-ci.yaml

image: docker:latest

services:
  - docker:dind

variables:
  TEST_NAME: registry.gitlab.com/pawelcyrklaf/learn-devops:$CI_COMMIT_REF_NAME

stages:
  - build
  - deploy

before_script:
  - docker login -u pawelcyrklaf -p examplepass registry.gitlab.com

build_image:
  stage: build
  script:
    - docker build -t $TEST_NAME .
    - docker push $TEST_NAME

deploy_image:
  stage: deploy
  script:
    - docker pull $TEST_NAME
    - docker kill $(docker ps -q) || true
    - docker rm $(docker ps -a -q) || true
    - docker run -dt -p 8080:80 --name gitlab_learn $TEST_NAME

我的Dockerfile

FROM centos:centos7
RUN yum install httpd -y
COPY index.html /var/www/html/

CMD [“/usr/sbin/httpd”,” -D”,” FOREGROUND”]
EXPOSE 80

Docker映像已成功构建,它已在注册表中,也已成功部署,但是当我执行docker ps时,我没有运行此映像。 enter image description here 我对本教程https://www.youtube.com/watch?v=eeXfb05ysg4

都做同样的事情

我做错了什么?

4 个答案:

答案 0 :(得分:3)

作业与另一个内部装有docker的服务容器一起计划在容器中。它可以工作,可以启动容器,但是在作业完成后,与docker的邻居服务也将停止。您正在检查,并且在主机上看不到任何容器。
尝试删除:

services:
  - docker:dind

另外,请检出predefined list of CI variables。您可以省略使用硬编码的凭据和图像路径。

P.S。您通常用来杀死和销毁所有容器,并且您的CI有一天会删除未被管理的容器,请购买此仓库...

答案 1 :(得分:0)

当我执行docker ps时,我没有运行该映像

您没有提到如何检查运行中的容器,所以我考虑下一个考虑因素

  1. 确保您确实检查了正确的跑步者。 一旦您没有在作业上设置任何tags,它将首先选择可用的作业。您可以在工作页面上看到在哪个跑步者上执行

  2. 确保您的容器没有倒下或没用完。 要查看所有容器,请使用docker ps -a-它显示所有容器甚至停止了一个。会有退出代码,您可以通过该代码确定原因。使用docker logs {container_id}进行调试(不带花括号放置container_id)

答案 2 :(得分:0)

Gitlab.com:

不确定您可以在Gitlab CI中运行docker应用程序,请尝试删除public getData(): Observable<Hentdata> { return this.httpClient.get<Hentdata>('api/hent') .pipe(catchError(err => this.handleError(err))); } 命令中的-d选项,该选项将在后台运行docker。

docker run

如果这行得通,则可能会迫使管道永不结束,并耗尽您的CI / CD分钟。

自托管的Gitlab:

您的Gitlab CI是要运行操作来构建和部署您的应用程序的,因此,让您的应用程序在Gitlab CI运行程序的同一实例上运行没有意义。即使您要在同一实例上运行该应用程序,也不应在运行程序所在的同一容器上运行该应用程序,并且要实现此目的,您应将Gitlab CI运行程序配置为在主机上使用Docker

无论如何,强烈建议您将Gitlab运行程序运行的地方以外的地方部署到托管的docker服务,Kubernetes或AWS ECS甚至更好。

答案 3 :(得分:0)

您没有指定设置是什么,但是根据问题中的信息,我可以推断出您正在使用gitlab.com(与私有GitLab实例相对)和带有Docker执行器的自托管运行程序。

您不能将Runner与Docker执行器一起使用,以将容器直接部署到基础Docker安装。

有两种方法可以做到这一点:

  1. 按照您发布的YT教程中的说明,使用带有shell executor的跑步者。
  2. 准备一个将使用SSH连接到服务器并在其中运行docker命令的帮助程序映像。