小编lep*_*eil的帖子

我们可以在 gitlab-ci.yml 中使用动态作业名称吗?

我必须从 jenkins 迁移到 gitlab,我希望能够使用动态作业名称,以便在管道摘要中直接获得一些信息,而无需单击每个作业等......在 jenkins 中,我们可以立即看到参数传递给我们的工作,这在 gitlab-ci 中不是这种情况。

我的测试运行器在 Windows 上,我尝试按如下方式定义 yml:

job_%myParam%:
  stage: build
  script:
    - set>varList.txt
  artifacts:
    paths:
    - varList.txt
Run Code Online (Sandbox Code Playgroud)

当我用 开始我的工作时%myParam%=true,该变量不会在工作名称中解释,因此它采用 job_%myParam% 的名称而不是预期的“job_true”。

这甚至可能吗?

谢谢:)

variables jobs continuous-integration dynamic gitlab

7
推荐指数
3
解决办法
5316
查看次数

gitlab ci yml 图像和服务机制?

我不明白关键字imageservicesfile.gitlab-ci.yml 中的机制。我们什么时候知道关键字的命令在哪个图像script上执行?

当我阅读 gitlabci 文档时,我很好地理解了关键字“图像”和“服务”的理论,因此我已经进行了测试并设法httpd通过 wget与服务进行交互,但是,实际上我无法理解图片是做什么用的?

让我解释 :)

首先,我创建了一个结构,其作业通过不声明任何图像来生成“uname -a”:

job_scriptWithDefaultImage:
  stage: gitlabtest1
  script:
    - uname -a
Run Code Online (Sandbox Code Playgroud)

结果然后向我显示了在跑步者上运行的“uname -a”:

$ uname -a
Linux runner-b41b332f-project-9060-concurrent-0 4.4.0-104-generic #127-Ubuntu SMP Mon Dec 11 12:16:42 UTC 2017 x86_64 Linux
Run Code Online (Sandbox Code Playgroud)

然后我只需在我的工作中添加一个图像,指定我想使用高山:

job_scriptWithAlpineImage:
  internship: gitlabtest2
  image: registry.hub.docker.com/library/alpine:latest
  script:
    - uname -a
Run Code Online (Sandbox Code Playgroud)

结果完全一样,uname 总是在跑步者身上运行,而不是我的 alpine ...

$ uname -a
Linux runner-9cade5e3-project-9060-concurrent-0 4.4.0-130-generic #156-Ubuntu SMP Thu Jun 14 08:53:28 UTC 2018 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

所以我完全不明白:

  • 我的头像有什么用?
  • 如何在我的管道作业script部分执行该图像中的命令?

service yaml image docker gitlab-ci

7
推荐指数
1
解决办法
2423
查看次数

无法使用 GradleUserHomeScopeServices.createCachingFileHasher() 创建 FileHasher 类型的服务

这是我的问题的上下文:

  • 一个 gitlab ci yml 管道
  • 同一份实习中的多个工作
  • 所有作业都使用需要使用缓存的任务 gradle
  • 所有作业共享相同的 gradle 缓存

我的问题:

有时,当同时有多个管道时,我得到:

出了什么问题:无法使用 GradleUserHomeScopeServices.createCachingFileHasher() 创建 FileHasher 类型的服务。

超时等待锁定文件哈希缓存 (/cache/.gradle/caches/5.1/fileHashes)。它目前正被另一个 Gradle 实例使用。所有者 PID:149 我们的 PID:137 所有者操作:我们的操作:锁定文件:/cache/myshop/reunion/.gradle/caches/5.1/fileHashes/fileHashes.lock

我找不到有关 gradle 使用的锁定系统的任何文档。我不明白为什么当 gradle 操作没有写入缓存目录时会定位锁。

有谁知道锁的工作原理?或者我可以简单地更改超时的持续时间以允许伴随的任务在失败之前等待足够长的时间吗?

通过 www.DeepL.com/Translator 翻译

我试图在没有守护进程的情况下调整 gradle,但没有奏效。

locking gradle gitlab-ci

6
推荐指数
2
解决办法
1万
查看次数

gitlab ci 脚本函数失败时掩码退出 1

我们知道,默认情况下,gitlab ci runners 使用set -o pipefail,如coderwall.com 中所述,此特定选项将管道的退出代码设置为最右侧命令的退出代码,以非零状态退出,或者如果所有命令都为零管道退出成功。

我们都使用“|| true”语句来防止 gitlab ci 作业在真正的退出 1 上失败(以允许后期处理失败),例如,如果我grep退出 1 但我认为这是正常的,因此我不我不希望我的工作失败,我写道:

job:
  script:
    - grep "a" myfile.txt || true
Run Code Online (Sandbox Code Playgroud)

但是当我使用函数而不是命令或脚本时,它不再起作用了:(

脚本的工作示例(给我退出 0):

job:
  script:
    - echo "exit 1" > test
    - chmox u+x test
    - test || true
Run Code Online (Sandbox Code Playgroud)

命令的工作示例(给我退出 0):

job:
  script:
    - exit 1 || true
Run Code Online (Sandbox Code Playgroud)

具有功能的非工作示例(给我退出 1):

job:
  script:
    - function test { exit 1; }
    - test || true
Run Code Online (Sandbox Code Playgroud)

具有功能的非工作示例(给我退出 1):

job:
  script:
    - function test …
Run Code Online (Sandbox Code Playgroud)

yaml function exit gitlab-ci gitlab-ci-runner

5
推荐指数
1
解决办法
5633
查看次数

如何使用 jq 将父元素插入到我的 json 中?

我想用 jq 在 json 上插入新的根元素,我的目标是通过在根一级之前添加一级来操作 json 层次结构:

json 示例:

{
 "option1":true
}
Run Code Online (Sandbox Code Playgroud)

我想获得:

{
 "root":
 {
  "option1":true
 }
}
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

$ echo '{"option1":true}' | jq -r '. + {"root"}'

它将元素插入到第一级,而不是之前:

{
 "root":null
 "option1":true
}
Run Code Online (Sandbox Code Playgroud)

有可能吗?

json jq

2
推荐指数
1
解决办法
2396
查看次数