我用来docker+machine运行我的gitlabci/cd 作业。
所以我的.gitlab-ci.yml样子如下:
stages:
- RUN_TESTS
image:
name: docker:stable
services:
- name: docker:dind
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
build-docker:
stage: RUN_TESTS
script:
- echo "Running the tests..."
- docker build -t run-tests .
Run Code Online (Sandbox Code Playgroud)
docker:dind这对于将图像设置为service块(如上所示)来说完全可以正常工作。
现在有趣的部分来了,我需要docker:dind图像中的一些其他包。所以我写了Dockerfile如下:
FROM docker:dind
RUN apk update
ENV PYTHONUNBUFFERED=1
RUN apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python
RUN python3 -m ensurepip
RUN pip3 install --no-cache --upgrade pip setuptools
RUN …Run Code Online (Sandbox Code Playgroud) 我有一个 gitlab-runner (docker 执行器),它正在使用docker build. 空间不足。
为了解决这个问题,我安装了一个外部磁盘(有足够的空间)并创建了一个分区。这可以在 找到并访问/run/media/<user>/STORAGE。我在这里创建了一个名为 的目录builds,我希望 Gitlab-runner 在其中构建我的 docker 映像(使用新的外部磁盘空间)。
在设置下[[runners]],/etc/gitlab-runner/config.toml我已经设置了builds_dir = "/run/media/<user>/STORAGE/builds"。
gitlab-runner 日志表明正在使用外部磁盘 ( Initialized empty Git repository in /run/media/<user>/STORAGE/builds/<user>/<repository-name>/.git/),但在同一阶段和时间构建仍然失败 ( no space left on device),这表明构建本身仍在旧磁盘空间上完成。
我是否正确理解了设置的目的builds_dir?如何让 gitlab-runner 只使用新磁盘?
例如我的文件是 test.env
test.env has the content
export SAMPLE="true"
Run Code Online (Sandbox Code Playgroud)
我希望在运行管道之前将变量 SAMPLE 设置为管道变量
我正在尝试下面提到的解决方案,但它并没有真正帮助
before_script:
- git clone test.env
- source test.env
stages:
- publish
test:
stage: publish
trigger:
project: test_pipeline
branch: master
strategy: depend
only:
variables:
- $SAMPLE == 'True'
Run Code Online (Sandbox Code Playgroud)
有没有办法预先获取变量,然后设置管道变量,以便可以根据这些管道变量执行
Gitlab CI/CD 新手。我的构建作业运行良好,但部署作业从未执行。我删除了所有规则,但它仍然无法运行。
这是我的 .gitlab-ci.yml 文件的内容:
build-job:
stage: build
script:
- echo "STAGE - BUILD"
- echo $CI_JOB_STAGE
- echo $CI_COMMIT_MESSAGE
- echo $CI_COMMIT_BRANCH
- echo $CI_ENVIRONMENT_NAME
- mkdir bin
- mkdir obj
- "dotnet build"
deploy-to-staging:
stage: deploy
script:
- echo "STAGE - DEPLOY (STAGING)"
Run Code Online (Sandbox Code Playgroud)
知道为什么 Gitlab 会跳过部署阶段吗?我必须明确定义我的阶段吗?我尝试过,但没有什么区别(这些行有一段时间位于 yml 文件的底部):
stages:
- build
- deploy
Run Code Online (Sandbox Code Playgroud) 我希望获得有关 Gitlab 运行程序实例的一些帮助,该实例会抛出“无法连接到位于 tcp://localhost:2375 的 Docker 守护进程。docker 守护进程正在运行吗?”
我的gitlab-ci.yml:
image: docker:18.09-dind
variables:
DOCKER_HOST: tcp://localhost:2375
DOCKER_DRIVER: overlay2
stages:
- build
- test
before_script:
- export REACT_APP_USERS_SERVICE_URL=http://127.0.0.1
job:
stage: build
script:
- apk add --update --no-cache gcc g++ make python2 python2-dev py-pip python3-dev curl
- curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
- docker-compose up -d --build
- docker logs testdriven_e2e:latest -f
after_script:
- docker-compose down
Run Code Online (Sandbox Code Playgroud)
错误输出:
(32/34) Installing pkgconf (1.6.1-r1)
(33/34) Installing python2-dev (2.7.18-r0)
(34/34) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Kaniko 构建/推送我的 docker 镜像到 GitLab 容器注册表(GitLab 自管理 15.3.0,带有 docker runner): https: //docs.gitlab.com/ee/ci/docker/using_kaniko。 html#building-a-docker-image-with-kaniko
正在执行的命令是
$ /kaniko/executor --context "${CI_PROJECT_DIR}/DSPWeb" --dockerfile "${CI_PROJECT_DIR}/DSPWeb/Dockerfile" --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}"
但这会导致此错误:
检查推送权限时出错 - 确保您输入了正确的标签名称,并且您已通过正确的身份验证,然后重试:获取目标标签:必须指定存储库名称
问题似乎是预定义的 CI/CD GitLab 内置变量为空/无法解析。回显变量结果:
$ echo $CI_PROJECT_DIR
/builds/xxx/datashieldingplatform
$ echo $CI_REGISTRY_IMAGE
$ echo $CI_REGISTRY
$ echo $CI_COMMIT_SHA
67de133f333b57f8effed69a497adf256945eb15
Run Code Online (Sandbox Code Playgroud)
CI_PROJECT_DIR 和 CI_COMMIT_SHA 解析得很好。
那么,这可能是一个权限问题吗?
谢谢
我正在使用 GitLab CI/CD。当管道中的作业失败时,我可以手动重试它们。一旦我重试工作,是否有人可以识别工作已重试?
特别是是否有任何 CI 变量显示作业已重试。
我正在尝试使用Blackbox加密我正在使用的存储库中的敏感文件,但我无法使GitLab CI管道加载解密文件所需的私有GPG密钥.
在,您可以看到GitLab CI运行器的输出,其中很明显:
但是,当我运行命令时gpg -v --import /tmp/server.gpg,我会继续gpg: no valid OpenPGP data found..这毫无意义.
我已经跟踪了我可以找到的所有帖子,但它们要么是关于验证文件内容而不是实际导入正确的密钥,要么密钥实际上是格式错误的,我的显然不是.
我很感激我能在这件事上得到任何帮助,因为我没有任何进展.
谢谢!
GitLab CI跑步者的输出:
Running with gitlab-ci-multi-runner 9.1.0 (0118d89) on docker-auto-scale (e11ae361)
Using Docker executor with image golang:1.8.1 ...
Using docker image sha256:3858bc6d4732445082339c9ccccfe56bf599d1fe7d9e850fb67ceec76807ed8d for predefined container...
Pulling docker image golang:1.8.1 ...
Using docker image golang:1.8.1 ID=sha256:6d0bfafa0452c6398be979f89614b5e3cb5d10e853ccd4f5791c4971a88065e0 for build container...
Running on runner-e11ae361-project-3172553-concurrent-0 via runner-e11ae361-machine-1493644095-36064084-digital-ocean-2gb...
Cloning repository...
Cloning into '/builds/project/repo'...
Checking out 7013b30a as feature/blackbox...
Skipping Git …Run Code Online (Sandbox Code Playgroud) 我正在阅读GitLab CI Multirunner文档,其中介绍了如何设置GitLab CI Multirunner执行程序,但我似乎无法找到有关在初始设置时更改执行程序的任何内容,无论是在文档中还是在线搜索.这支持吗?
“主机密钥验证失败。” 运行“ ssh name @ server”时在Gitlab_ci上运行
这是我的gitlab_ci的一部分,应该登录到服务器并从仓库中运行脚本:
script:
- which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
- eval $(ssh-agent -s)
- ssh-add <(echo -e "$SSH_PRIVATE_KEY")
- echo "debug"
- echo "$SSH_PRIVATE_KEY" # all is ok here, it'll be printed
- echo "debug"
# - here comes an error
- (cat ./script/script1.sh) | ssh -t -t $SSH_USERNAME@$SSH_HOST
Run Code Online (Sandbox Code Playgroud)
和错误:
Host key verification failed.
ERROR: Job failed: exit code 1
Run Code Online (Sandbox Code Playgroud)
为什么会出错?变量已设置。
当我从本地计算机和Gitlab手动执行相同操作时,私钥确实起作用。
gitlab-ci-runner ×10
gitlab ×8
gitlab-ci ×7
docker ×3
cicd ×1
dockerfile ×1
git ×1
gitlab-api ×1
gitlab-ce ×1
gnupg ×1
kaniko ×1
ssh-keys ×1
yaml ×1