Gitlab 运行程序抛出错误:准备失败:Getwd:getwd:没有这样的文件或目录?
gitlab版本是:GitLab社区版8.6.4 gitlab-runner版本:1.11.5
我的 CIERROR: Preparation failed: Getwd: getwd经常抛出,但有时我们承诺工作正常。所以我们不知道导致这个问题的最终原因是什么。
我们只知道一件事,那就是在移动构建目录后会显示此错误。
我刚刚注意到,当PWD在 下访问变量时script,它会按预期工作,例如:
test:
script:
- docker run --rm -v $PWD/wd image [options]
Run Code Online (Sandbox Code Playgroud)
但是当上面的内容被包含的变量替换时,这就失败了$PWD。事实上,像下面这样的指令会导致错误:
variables:
DOCKER_RUN: "docker run --rm -v $PWD:/wd"
test:
script:
- $DOCKER_RUN image [options]
Run Code Online (Sandbox Code Playgroud)
这是因为该变量DOCKER_RUN在这里被解释为“docker run --rm -v :/wd”。也就是说,就像PWD是空的一样,我不明白为什么。
我也一直在探索 gitlab预定义变量,但找不到合适的替代品PWD,而不是通过组合它们,例如。使用"${CI_BUILDS_DIR}/${CI_PROJECT_NAMESPACE}",这也会导致错误。
我使用子模块创建一个新项目并想要运行 gitlab-ci.yml。但每次跑步者都告诉我他无法访问或找不到该项目。该运行器是 Windows 10 系统上的共享运行器(必需)。它适用于较旧的项目,但不适用于新项目。
你有什么想法我做错了什么吗?
我已经做了什么:
CI 脚本:
stages:
- build
variables:
ARTIFACTS_OUTPUT_PATH: "./builds"
GIT_SUBMODULE_STRATEGY: recursive
test_123:
stage: build
only:
- tags
- triggers
- schedules
- web
script:
- some commands
artifacts:
paths:
- ./builds/*
tags:
- windows
Run Code Online (Sandbox Code Playgroud)
错误:
<!-- language: lang-sh -->
Cloning into 'C:/gitlab-runner/builds/765197b3/0/user/ttttttt'...
Submodule 'hfdg' (git@gitlab.XXXXXXXX:user/hfdg.git) registered for path 'hfdg'
Cloning into 'C:/gitlab-runner/builds/765197b3/0/user/ttttttt/hfdg'...
remote:
remote: ========================================================================
remote:
remote: The project you were looking …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用共享运行程序来运行处理部署所需的环境变量的脚本。我的 YAML 配置中失败的部分是:
release:
stage: release
image: docker:latest
only:
- master
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay
before_script:
- docker version
- docker info
- docker login -u ${CI_REGISTRY_USER} -p ${CI_BUILD_TOKEN} ${CI_REGISTRY}
script:
- dckstart=$(cat dockerfile-start)
- export > custom_vars
- chmod +x scripts/format-variables.sh
- bash scripts/format-variables.sh
- dckenv=$(cat custom_vars)
- dckfin=$(cat dockerfile-finish)
- echo -e "$dckstart\n$dckenv\n$dckfin" >> Dockerfile
- rm dockerfile-start dockerfile-finish custom_vars
- docker build -t ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest --pull .
- docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest
after_script:
- docker logout ${CI_REGISTRY} …Run Code Online (Sandbox Code Playgroud) 我正在尝试调试 GitLab CI 管道中的一些问题。我有一个步骤 B,它使用了步骤 A 中的一些工件。
步骤 A 很长(并且在 CI 中工作),所以我不想在本地运行它:我只是从 GitLab 下载生成的工件。所以我有一个artifacts.zip,我提取它以获得一个output和一个logs目录。到现在为止还挺好。
我想在本地运行步骤 B,使用gitlab-runner. 请注意,我使用的是 9.5 版(https://docs.gitlab.com/runner/install/old.html)。
我正在使用这个命令:
gitlab-runner exec docker step-b
Run Code Online (Sandbox Code Playgroud)
正如我所解释的,step-b需要来自step-a. 这是我尝试过的:
gitlab-runner exec docker --docker-volumes ~/Downloads/output step-b
Run Code Online (Sandbox Code Playgroud)
在步骤 B 中执行的脚本之一正在执行类似mv ../output /some/where/else. 但是,此脚本失败并出现以下错误:
mv: cannot stat '../output': No such file or directory
Run Code Online (Sandbox Code Playgroud)
出现此错误后,我有两个问题:
这个脚本在哪里执行?它是这样调用的.gitlab-ci.yml:
./scripts/my_script.sh.
Run Code Online (Sandbox Code Playgroud)
什么是.在这种情况下?
--docker-volumes ~/Downloads/output将目录安装在正确的位置以便我的脚本可以找到它?编辑
根据要求,这里是步骤 A 的描述。
script: …Run Code Online (Sandbox Code Playgroud) 我正在尝试 gitlab 的 CI/CD 并正在制作一个构建项目的 yml 文件。问题是我得到以下信息:
$ npm run build
> myreactapp@0.1.0 build C:\GitLab-Runner\builds\QLuLhspz\0\I416547\s4-software-fun-frontend
> react-scripts build
Creating an optimized production build...
Treating warnings as errors because process.env.CI = true.
Most CI servers set it automatically.
Failed to compile.
./src/Components/Task/TaskList.js
Line 120:15: 'currentTasks' is assigned a value but never used no-unused-vars
Line 175:25: Headings must have content and the content must be accessible by a screen reader jsx-a11y/heading-has-content
./src/Components/House/House.js
Line 150:16: 'Address' is assigned a value but never used …Run Code Online (Sandbox Code Playgroud) 这以前确实有效!
我的管道中的部署步骤是通过 SSH 连接到 DO 框并从 Docker 注册表中提取代码。如前所述,这之前是有效的,这是我当时deploy的一步,从这里.gitlab-ci.yml得到了很好的灵感:Using SSH
deploy:
stage: deploy
image: docker:stable-dind
only:
- master
services:
# Specifying the DinD version here as the latest DinD version introduced a timeout bug
# Highlighted here: https://forum.gitlab.com/t/gitlab-com-ci-stuck-on-docker-build/34401/2
- docker:19.03.5-dind
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
environment:
name: production
when: manual
before_script:
- mkdir -p ~/.ssh
- echo "$DEPLOYMENT_SERVER_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- eval "$(ssh-agent -S)"
- …Run Code Online (Sandbox Code Playgroud) 这是我的.gitlab-ci.yml文件:
image: docker:18
varibales:
DOCKER_DRIVER: "overlay2"
DOCKER_HOST: tcp://docker:2375
test:
services:
- "docker:18-dind"
script:
- docker info
Run Code Online (Sandbox Code Playgroud)
我运行它:
gitlab-runner exec docker --docker-privileged --docker-pull-policy if-not-present --docker-tlsverify=false test
Run Code Online (Sandbox Code Playgroud)
它有效。
但我想使用当前的 docker 版本。所以我读了这个文档。
gitlab-runner exec docker --docker-privileged --docker-pull-policy if-not-present --docker-tlsverify=false test
Run Code Online (Sandbox Code Playgroud)
我用与上面相同的方式运行它:
gitlab-runner exec docker --docker-privileged --docker-pull-policy if-not-present --docker-tlsverify=false test
Run Code Online (Sandbox Code Playgroud)
不幸的是,这以错误结束:
错误:无法连接到位于 tcp://docker:2375 的 Docker 守护进程。docker 守护进程是否正在运行?
我已经看到这个问题和许多其他问题。但我找不到一个可以gitlab-runner exec docker在每个 UNIX 系统上使用docker:19的最小工作示例docker:19-dind
编辑:
gitlab-runner --version(来自 Manajaro 仓库):
Version: 13.0.0
Git revision: HEAD
Git …Run Code Online (Sandbox Code Playgroud) 我有一个私人 git 存储库。我的跑步者在一台单独的机器上,都是 ubuntu。当我尝试在 yml 文件中 ping $CI_REGISTRY 时,我在构建过程中看到 $CI_REGISTRY 域名未解析为正确的 IP 地址。我需要访问服务器的内部地址,而不是外部地址,因此我在运行 gitlab runner 的主机上设置了一个具有正确地址的主机文件,但执行器忽略了它。奇怪的是,它提供的地址是 cloudflare 网络上的内部地址,而不是我试图访问的主机的外部地址,就像我预期的那样,如果它正在进行 DNS 查找。
我怎样才能:
我希望我的 Gitlab CI 作业在提交消息以特定字符串开头时不运行:[maven-scm]
因此,我的.gitlab-ci.yaml文件中有以下配置:
image: maven:3.6.3-jdk-11-slim
stages:
- test
test:
stage: test
cache:
key: all
paths:
- ./.m2/repository
script:
- mvn clean checkstyle:check test spotbugs:check
rules:
- if: '$CI_COMMIT_MESSAGE !~ /^\[maven-scm\] .*$/'
Run Code Online (Sandbox Code Playgroud)
我的提交消息是:[maven-scm] I hope the test job does not run
但测试工作仍然让我感到沮丧。我查看了 GitLab 文档中的规则,但找不到该作业仍然运行的原因。我不确定我是否遗漏了一些东西。
如果有人能指出我正确的方向,那就太好了。
更新:
我尝试了 only/ except 子句而不是规则。我将 yaml 文件修改为以下内容:
image: maven:3.6.3-jdk-11-slim
stages:
- test
test:
stage: test
cache:
key: all
paths:
- ./.m2/repository
script:
- mvn clean checkstyle:check test spotbugs:check …Run Code Online (Sandbox Code Playgroud)