我以前使用shell为我的gitlab运行器构建我的项目 . 到目前为止,我已经设置了管道,它将运行我在gitlab-ci.yml文件中设置的任何命令,如下所示:
gitlab-ci.yml using shell runner
before_script:
- npm install
- npm install --save @angular/material @angular/cdk
cache:
paths:
- node_modules/
stages:
- dev
- staging
- production
build_dev:
stage: dev
script:
- rm ./package-lock.json
- npm run build
- ./node_modules/@angular/cli/bin/ng test --browsers PhantomJS --watch false
现在,我想切换到泊坞窗图像 . 我已经重新配置了跑步者使用docker图像,我在下面看到的新gitlab-ci.yml文件中指定了图像 . 我按照gitlab-ci docker教程,这是它停止的地方所以我不完全确定从哪里开始:
gitlab-ci.yml using docker runner
image: node:8.10.0
before_script:
- npm install
- npm install --save @angular/material @angular/cdk
cache:
paths:
- node_modules/
stages:
- dev
- staging
- production
build_dev:
stage: dev
script:
- rm ./package-lock.json
- npm run build
- ./node_modules/@angular/cli/bin/ng test --browsers PhantomJS --watch false
Questions:
- 使用我当前的gitlab-ci.yml文件,如何构建一个docker镜像/甚至构建一个?如果有,那意味着什么?目前管道通过,但我不知道它是否在docker镜像中(我本来应该告诉?) .
另外,假设已创建docker镜像,运行测试,并且管道已通过;它应该将代码推送到新的存储库(尚未包含在yml文件中) . 从我收集到的,图像没有被推动,它只是代码,对吧?那么这个创建的docker镜像怎么办?
-
如何使用Dockerfile?我看到gitlab-ci.yml文件和Dockerfile之间没有链接 .
-
我是否需要在
docker run <commands>
或docker exec <commands>
中的gitlab-ci.yml文件中包围所有命令?如果不包含这两个命令中的一个,它似乎只能在服务器上运行而不是在docker镜像中运行 . -
我见过人们在gitlab-ci.yml文件和Dockerfile中都指定了一个图像 . 我有一个角度项目,我指定了
image: node:8.10.0
的图像 . 在Dockerfile中,我应该指定相同的图像吗?我想知道两个图像的使用是什么/如果选择一个图像而不是另一个图像将严重影响我的构建 .
1 回答
如果要将应用程序完全停靠,则必须采用不同的方法来构建应用程序 . 将有角度的东西导出到Dockerfile并在
.gitlab-ci
中获取docker操作,而不是像这里的有角度的东西:您可以设置一些构建作业 - 用于 生产环境 ,开发,升级等 . 在您的
.gitlab-ci.yaml
旁边,您可以放置Dockerfile
和Dockerfile.app
- Dockerfile.app代表构建您的角度应用:现在有了你的应用程序,它可以通过Web服务器提供 - 它's your choice and a different configuration that follows with each choice - cant even scratch a surface here. That'在
Dockerfile
实现 - 我们通常在我们公司使用Nginx .从这里开始,它是关于发布您的图像并进行部署 . 我只是指定了如何在docker中构建它们,因为这似乎是问题所在 .
如果你想部署你的图像并在某个地方运行它 - 选择一个提供者 - AWS,Heroku,自己的基础设施 - 按照自己的方式使用它,但这远远不能覆盖所有那些一个答案,所以我会把它留给另一个当您指定要部署新构建的图像的位置时,以及您希望如何提供它的问题 . 在我们公司,我们与Rancher协调一致,但市场上有多种令人敬畏的竞争选择 .
Edit 用于自定义注册表
以上
.gitlab-ci
配置仅适用于Gitlab的"internal"注册表,如果您想使用自己的注册表,请相应地更改值:从
-u gitlab-ci-token
到您在注册表中的登录信息,从
$CI_JOB_TOKEN
到您的密码从
$CI_REGISTRY
到您的注册地址这些值应存储在Gitlab的
CI secret variables
中,并通过env变量引用,以便它们不会保存在存储库中 .最后,如果您决定保护这些值,您的脚本可能如下所示 . 请参阅Gitlab的official docs on how to add secret CI variables - 超级简单的任务 .