我正在尝试设置一个 gitlab 运行程序来使用 gitlab-ci 而不是我的 Jenkins。我设置了一个带有链接 docker.sock 的 docker 容器
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /config/file/on/host:/etc/gitlab-runner \
gitlab/gitlab-runner:latest
Run Code Online (Sandbox Code Playgroud)
容器运行后,我向 gitlab 服务器注册了一个新的运行程序,其配置如下
concurrent = 1
check_interval = 0
[[runners]]
name = "lianli"
url = "<https://gitlab_server.de"
token = "<secret>"
executor = "docker"
[runners.docker]
tls_verify = false
image = "debian:latest"
privileged = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
Run Code Online (Sandbox Code Playgroud)
现在一切都已连接。但是当管道运行时,它会以访问错误结束:
remote: Git access over HTTP is not allowed
fatal: unable to access …Run Code Online (Sandbox Code Playgroud) 请帮忙。无论我做什么,即使当我使用必需的“-p”开关时,它仍然告诉我访问被拒绝。是的,我对 exe 和文件夹拥有完全权限。是的 cmd 正在以管理员身份运行
C:\Users\username\Desktop\gitlab>gitlab-ci-multi-runner-windows-amd64.exe --version
Version: 9.2.0
Git revision: adfc387
Git branch: 9-2-stable
GO version: go1.7.5
Built: Mon, 22 May 2017 16:01:18 +0000
OS/Arch: windows/amd64
Run Code Online (Sandbox Code Playgroud) 我尝试使用 gitlab runner 来测试和构建我的节点服务器,但在尝试自动化测试时遇到了一个小问题。在我的 package.json 中我有脚本
"scripts": {
"start": "node app.js",
"test-init": "node ./node_modules/jasmine/bin/jasmine.js init",
"test": "set NODE_ENV=Dev&& node ./node_modules/jasmine/bin/jasmine.js"
},
Run Code Online (Sandbox Code Playgroud)
所以NODE_ENV=Dev会加载不同的设置文件。一个使用 mongodb url 的服务器"mongodb://mongo/DBName",当我在本地主机上运行时,npm test服务器崩溃(正如它应该的那样),因为它无法使用开发设置文件连接到 mongo。但是,当我在运行器上运行 GitLab 中的项目时,它不会连接到数据库,因为它使用具有 url 的非开发设置文件。GitLab-ci 中是否有任何原因导致未设置 NODE_ENV?下面是我的 GitLab-ci.yml
image: node:latest
stages:
- build
- test
cache:
paths:
- node_modules/
services:
- mongo
install_dependencies:
stage: build
script:
- npm install
artifacts:
paths:
- node_modules/
test_with_lab:
stage: test
script:
- npm run test-init
- npm test
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取仅包含 gitlab 运行者姓名的列表。
所以输出gitlab-runner list 2>&1是:
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
default_runner Executor=shell Token=251cda361f983e612b27381e2f73ad URL=http://10.6.20.230
test runner Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230
Run Code Online (Sandbox Code Playgroud)
请注意,跑步者的姓名中可以包含空格。
所以我尝试了以下方法:
gitlab-runner list 2>&1 | awk -F'Executor' '{if(NR>1)print $1}'这给了我几乎我想要的东西(除了我需要删除的尾随空格)。
default_runner
test runner
Run Code Online (Sandbox Code Playgroud)
但是,如果我将字段分隔符更改为Executor=希望使其更加明确,则它不再起作用。它返回整行。
$ gitlab-runner list 2>&1 | awk -F'Executor=' '{if(NR>1)print $1}'
default_runner Executor=shell Token=251cda361f983e612b27381e2f73ad URL=http://10.6.20.230
test runner Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230
Run Code Online (Sandbox Code Playgroud)
我尝试过逃避它,但Executor\=没有成功。如何在分割中包含等号?
编辑:
如果我取其中一行并将其回显到 awk 中,它就会起作用
$ echo "test runner Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230" | awk -F'Executor=' '{print $1}'
test runner
Run Code Online (Sandbox Code Playgroud)
另一件需要注意的事情是,无论出于何种原因,gitlab-runner list …
我正在尝试ci通过docker执行器在本地运行管道以进行调试:
gitlab-runner exec docker <job_name>
Run Code Online (Sandbox Code Playgroud)
在某个时间点,它需要克隆一个私有git存储库。
我正在使用gitlab 建议的典型配方。
variables:
MY_PRIVATE_KEY: <my_private_key>
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$MY_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
Run Code Online (Sandbox Code Playgroud)
但是,当尝试将密钥添加到代理时:
$ ssh-add <(echo "$MY_PRIVATE_KEY")
Enter passphrase for /dev/fd/63: Running after script...
ERROR: Job failed: exit code 1
FATAL: exit code 1 …Run Code Online (Sandbox Code Playgroud) 我的gitlab CI如下:
stages:
- test
cache:
key: ${CI_COMMIT_SHA}
paths:
- mymark
test:
stage: test
script:
- ls -l
- echo "hi" > mymark
- ls -l
tags:
- myrunner
only:
- dev
Run Code Online (Sandbox Code Playgroud)
该文件mymark由构建脚本创建:
$ ls -l
total 76
-rw-r--r-- 1 root root 3 Mar 15 10:48 mymark
Run Code Online (Sandbox Code Playgroud)
但 GitLab 没有看到它:
Creating cache 122f151d6b0a9d37cfa2172941d642e5c48287fc...
WARNING: mymark: no matching files
Created cache
Job succeeded
Run Code Online (Sandbox Code Playgroud)
这似乎是随机发生的:有时找到文件,有时找不到:
Creating cache 63d295dad175370aa61d13c4d2f3149e050df5e0...
mymark: found 1 matching files
Created cache
Job succeeded
Run Code Online (Sandbox Code Playgroud) 登录到我的 GitLab 注册表后,我收到以下输出:
$ docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://gitlab.MYDOMAIN:4501/v2/: denied: access forbidden
Run Code Online (Sandbox Code Playgroud)
在我的 Linux 机器上,使用带有我的私人帐户详细信息的 docker 登录会导致相同的错误。
设置
泊坞窗Docker version 18.03.1-ce, build 9ee9f40
我的 GitLab docker 容器的 traefik
为 GitLab 注册表打开端口 4501 并传递 docker 变量GITLAB_OMNIBUS_CONFIG: | registry_external_url 'https://${GITLAB_DOMAIN}:${GITLAB_REGISTRY_PORT}'
UNAUTHORIZED - authentication required.gitlab-ci.yml
image: docker
services:
- name: docker:dind
command: ["--insecure-registry=gitlab.MYDOMAIN:4501"]
before_script:
- docker login -u $CI_REGISTRY_USER …Run Code Online (Sandbox Code Playgroud) 我在一些项目上启用了 GitLab CI,有时,当存在并发时,作业看起来像是在排队。
我正在为 10 个或更多项目使用一个特定的运行程序。
在多个项目中使用 GitLab CI 运行程序时是否有最佳实践?我应该为多个项目使用一个或多个跑步者吗?
我需要为 elasticsearch 服务启用脚本来运行我的 rspec 测试
# config/elasticsearch.yml
script.inline: on
script.indexed: on
Run Code Online (Sandbox Code Playgroud)
我尝试在 docker 容器内按以下方式更改 elasticsearch 配置.gitlab-ci.yml:
rspec:
stage: test
services:
- mysql:5.6.42
- name: elasticsearch:1.6.1
command: ["echo 'script.inline: on' >> /etc/elasticsearch/elasticsearch.yml", "echo 'script.indexed: on' >> /etc/elasticsearch/elasticsearch.yml", "systemctl restart elasticsearch"]
...
Run Code Online (Sandbox Code Playgroud)
但服务容器启动失败
*** WARNING: Service runner-6JNFXPMk-project-9870108-concurrent-0-elasticsearch-1 probably didn't start properly.
Health check error:
ContainerStart: Error response from daemon: Cannot link to a non running container: /runner-6LBTXPMk-project-13870108-concurrent-0-elasticsearch-1 AS /runner-6LBTXPMk-project-13870108-concurrent-0-elasticsearch-1-wait-for-service/service (executor_docker.go:1318:0s)
Service container logs:
2018-12-26T11:07:47.604151437Z /docker-entrypoint.sh: line 20: /echo 'script.inline: on' …Run Code Online (Sandbox Code Playgroud) 我想在每次当前里程碑分支发生变化时触发一个管道,它可以与硬编码的 milistone 编号一起正常工作,问题是我们每两周增加一次里程碑编号,并且 gitlab runner 不会解析.gitlab-ci.yml通配符,因此类似的事情不起作用
job:
only:
- milestone-*
Run Code Online (Sandbox Code Playgroud)
我还按照 Makoto Emura 在评论中的建议尝试了正则表达式
java:
only:
- /^mileston-.*$/
Run Code Online (Sandbox Code Playgroud)
现在我以这种方式使用它并.gitlab-ci.yml在创建新的里程碑后 更新我的
job:
only:
- milestone-10
Run Code Online (Sandbox Code Playgroud)
我尝试寻找目标分支的环境变量但没有找到任何
有谁知道解决方案吗?