我有以下配置为.gitlab-ci.yml,但我在成功传递构建阶段后发现(这将创建一个名为venv的virtualenv),似乎在测试阶段你会得到一个全新的环境(没有venv目录在所有).所以我想我应该将setup脚本放在before_script中,因为它会在每个阶段运行(build/test/deploy).这是一种正确的方法吗?
before_script:
- uname -r
types:
- build
- test
- deploy
job_install:
type: build
script:
- apt-get update
- apt-get install -y libncurses5-dev
- apt-get install -y libxml2-dev libxslt1-dev
- apt-get install -y python-dev libffi-dev libssl-dev
- apt-get install -y python-virtualenv
- apt-get install -y python-pip
- virtualenv --no-site-packages venv
- source venv/bin/activate
- pip install -q -r requirements.txt
- ls -al
only:
- master
job_test:
type: test
script:
- ls -al
- source venv/bin/activate
- cp crawler/settings.sample.py crawler/settings.py …Run Code Online (Sandbox Code Playgroud) 如果项目有多个可用的跑步者,gitlab ci如何决定使用哪个跑步者?
我有一个omnibus gitlab 8.6.6-ee安装,配置了2个跑步者.跑者是相同的(docker图像,配置等),除了它们在不同的计算机上运行.
如果他们都是空闲的,那么他们中的任何一个都可以运行,哪个会运行?
我想创建一个基于Docker的Gitlab CI运行器,它从私有Docker Registry(v2)中提取构建的docker镜像.我不能让Gitlab Runner从本地注册表中提取图像,它试图从/v1API中获取内容.我收到以下错误消息:
错误:构建失败:拉图像时出错:获取http:// registry:5000/v1/repositories/maven/images:在127.0.1.1:53上拨tcp:lookup注册表:没有这样的主机
这是一个最小的例子,使用docker-compose和Web浏览器.
我有以下docker-compose.yml文件:
version: "2"
services:
gitlab:
image: gitlab/gitlab-ce
ports:
- "22:22"
- "8080:80"
links:
- registry:registry
gitlab_runner:
image: gitlab/gitlab-runner
volumes:
- /var/run/docker.sock:/var/run/docker.sock
links:
- registry:registry
- gitlab:gitlab
registry:
image: registry:2
Run Code Online (Sandbox Code Playgroud)
在第一次Gitlab登录后,我将跑步者注册到Gitlab实例中:
root@130d08732613:/# gitlab-runner register
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
http://192.168.61.237:8080/ci
Please enter the gitlab-ci token for this runner:
tE_1RKnwkfj2HfHCcrZW
Please enter the gitlab-ci description for this runner:
[130d08732613]: docker
Please enter the …Run Code Online (Sandbox Code Playgroud) 我有一个docker-compose.yml文件在端口上启动简单的HTTP回显服务8800.
version: '2'
services:
echo-server:
image: luisbebop/echo-server
container_name: echo-server
ports:
- "8800:8800"
Run Code Online (Sandbox Code Playgroud)
超级简单的东西.如果我docker-compose up在本地计算机上运行并运行:
echo "Hello World" | nc 127.0.0.1 8800
Run Code Online (Sandbox Code Playgroud)
然后我看到回声.但是:如果我在docker容器中运行同一个compose场景,通过GitLab运行器,它会失败.
我试图在GitLab上引起关注这个问题,但结果有限:https://gitlab.com/gitlab-org/gitlab-ce/issues/26566
我的.gitlab-ci.yml文件看起来像:
---
stages:
- docker_test
services:
- docker:dind
docker_test:
stage: docker_test
image: docker:latest
script:
- docker version
- apk update
- apk add py-pip
- pip install docker-compose
- docker-compose up -d
- sleep 10
- netstat -tulpn
- docker-compose port echo-server 8800
- …Run Code Online (Sandbox Code Playgroud) 我在 docker 容器中有一个 gitlab runner,如果我运行像 nginx 这样的图像,运行良好。但是现在我尝试在 gitlab runner 中的 docker (dind) 中运行 docker,我想在 dind 中运行 docker-compose。Docker 信息运行良好,但如果我尝试运行 docker-compose,我会收到一个权限被拒绝的错误。
我将 /usr/local/bin/docker-compose 文件链接到 gitlab runner 容器,并将其输入到 runner config.toml 文件的卷参数中。
如果我尝试运行 sudo,它会以未知的命令错误结束,因此这不是解决方案。
我是否必须更多地链接一些文件,还是链接到许多嵌套容器?
我有一个包含几个.NET项目的解决方案.我使用GitLab而不是自托管来进行版本控制,并且也想开始使用他们的CI工具.我已将以下.gitlab-ci.yml文件添加到我的root:
stages:
- build
- test
build_job:
stage: build
script:
- 'echo building...'
- 'msbuild.exe Bizio.sln'
except:
- tags
test_job:
stage: test
script:
- 'echo: testing...'
- 'msbuild.exe Bizio.sln'
- 'dir /s /b *.Tests.dll | findstr /r Tests\\bin\\ > tests_list.txt'
- 'for /f %%f in (tests_list.txt) do mstest.exe /testcontainer: "%%f"'
except:
- tags
Run Code Online (Sandbox Code Playgroud)
该build阶段总是失败,因为它不知道什么msbuild是.确切的错误是:
/ bin/bash:第61行:msbuild.exe:找不到命令
经过一番调查,我发现我正在使用共享的跑步者.以下是作业运行的整个输出:
Running with gitlab-runner 10.6.0-rc1 (0a9d5de9)
on docker-auto-scale 72989761
Using Docker executor with image ruby:2.5 ...
Pulling docker …Run Code Online (Sandbox Code Playgroud) 以下是我的 .gitlab-ci.yml
stages:
- build
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
services:
- docker:dind
build-image:
image: docker:stable
stage: build
script:
- docker build --no-cache -t repo/myimage:$CI_JOB_ID .
- docker push repo/myimage:$CI_JOB_ID
Run Code Online (Sandbox Code Playgroud)
我已经在 Gitlab 中设置了 DOCKER_AUTH_CONFIG,如下所示(包含所有匹配的可能性)
{
"auths": {
"https://index.docker.io": {
"auth": "...."
},
"https://index.docker.io/v1/": {
"auth": "..."
},
"https://index.docker.io/v2/": {
"auth": "..."
},
"index.docker.io/v1/": {
"auth": "..."
},
"index.docker.io/v2/": {
"auth": "..."
},
"docker.io/repo/myimage": {
"auth": "..."
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,每当尝试推送图像时,就会出现以下错误
$ docker push repo/myimage:$CI_JOB_ID
The push refers to repository [docker.io/repo/myimage] …Run Code Online (Sandbox Code Playgroud) 我在 gitlab.com 上有一个私人仓库。我已经使用 gitlab 共享运行程序设置了 CI/CD 管道。在代码推送上,构建了一个 docker 镜像,登录到 gitlab 私有 docker 注册表并推送镜像。它适用于共享的跑步者。现在我正在尝试为管道创建自定义运行器。
我在 DigitalOcean 上创建了一个 Droplet(Ubuntu 18.04 上的 Docker 18.09.2~3 - 8 GB / 4 CPU / 160 GB SSD)
ssh 进入液滴
创建一个跑步者(来自https://docs.gitlab.com/runner/install/docker.html#docker-image-installation-and-configuration)
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
Run Code Online (Sandbox Code Playgroud)
并注册它(来自https://docs.gitlab.com/runner/register/index.html#one-line-registration-command)
docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
--non-interactive \
--executor "docker" \
--docker-image alpine:3 \
--url "https://gitlab.com/" \
--registration-token "MY_TOKEN" \
--description "docker-runner" …Run Code Online (Sandbox Code Playgroud) 我们的 CI/CD 管道停止处理“ng test”作业并失败并显示以下错误消息:
[karma-server]: TypeError: Cannot read property 'range' of undefined
at handleRangeHeaders (/builds/......../node_modules/webpack-dev-middleware/lib/util.js:131:21)
at processRequest (/builds/......../node_modules/webpack-dev-middleware/lib/middleware.js:98:19)
at ready (/builds/......./node_modules/webpack-dev-middleware/lib/util.js:53:12)
at handleRequest (/builds/........../node_modules/webpack-dev-middleware/lib/util.js:182:5)
at /builds/............/node_modules/webpack-dev-middleware/lib/middleware.js:64:7
at new Promise (<anonymous>)
at middleware (/builds/........../node_modules/webpack-dev-middleware/lib/middleware.js:63:12)
Run Code Online (Sandbox Code Playgroud)
添加句点以列出一些特定的回购名称
我们以前从未遇到过此错误,并且以前运行良好。同样奇怪的是,当我在本地运行它时,它工作得很好。但是当 GitLab 运行程序执行它时,它失败了。任何帮助,将不胜感激。谢谢!
当非所有者开发人员将分支推送到我们的 Gitlab 存储库时,它会返回一条“管道失败”消息,其中包含详细信息“管道由于未验证用户而失败”。在开发人员的帐户上,他收到添加信用卡以验证他是否有资格获得免费管道分钟的提示。
但是我没有设置任何管道 - 我的 repo 中没有 gitlab-ci.yml 文件,新分支也没有。Gitlab 上项目的 CI/CD 选项卡下没有作业或计划。那么为什么有一个标记说分支在管道中失败了呢?