我在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时,我没有运行此映像。 我对本教程https://www.youtube.com/watch?v=eeXfb05ysg4
都做同样的事情我做错了什么?
答案 0 :(得分:3)
作业与另一个内部装有docker的服务容器一起计划在容器中。它可以工作,可以启动容器,但是在作业完成后,与docker的邻居服务也将停止。您正在检查,并且在主机上看不到任何容器。
尝试删除:
services:
- docker:dind
另外,请检出predefined list of CI variables。您可以省略使用硬编码的凭据和图像路径。
P.S。您通常用来杀死和销毁所有容器,并且您的CI有一天会删除未被管理的容器,请购买此仓库...
答案 1 :(得分:0)
当我执行docker ps时,我没有运行该映像
您没有提到如何检查运行中的容器,所以我考虑下一个考虑因素
确保您确实检查了正确的跑步者。
一旦您没有在作业上设置任何tags
,它将首先选择可用的作业。您可以在工作页面上看到在哪个跑步者上执行
确保您的容器没有倒下或没用完。
要查看所有容器,请使用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安装。
有两种方法可以做到这一点: