标签: gitlab-pipelines

为什么我在 Gitlab 合并请求中收到“管道因用户未经验证而失败”和“分离的合并请求管道”?

当非所有者开发人员将分支推送到我们的 Gitlab 存储库时,它会返回一条“管道失败”消息,其中包含详细信息“管道由于未验证用户而失败”。在开发人员的帐户上,他收到添加信用卡以验证他是否有资格获得免费管道分钟的提示。

但是我没有设置任何管道 - 我的 repo 中没有 gitlab-ci.yml 文件,新分支也没有。Gitlab 上项目的 CI/CD 选项卡下没有作业或计划。那么为什么有一个标记说分支在管道中失败了呢?

pipeline gitlab gitlab-ci gitlab-ci-runner gitlab-pipelines

12
推荐指数
4
解决办法
3444
查看次数

GitLab CI:如果仅某些文件发生更改,则跳过作业

commit/merge request如果我的管道中唯一的更改部分与文件相关,我需要跳过管道中的 GitLab CI 作业*.md, eslintrc.json or jsconfig.json

例子:

  • 如果这些文件已更改,但其他文件(例如 *.js)也已更改:作业应该运行。
  • 如果这些文件根本没有更改,但其他 *.js 文件已更改:作业应该运行。
  • 如果 README.md 和 eslintrc.json 已更改且其他任何内容均未更改:作业不应运行

我试图实现这一点,但到目前为止我还没有发现except:changes也没有用处。rules:when:never我该怎么做?

gitlab-ci gitlab-pipelines

12
推荐指数
1
解决办法
7470
查看次数

使用 .gitlab-ci.yaml 文件在 gitlab 中计划管道

我试图使用 .gitlab-ci.yaml 文件在 gitlab 中安排 ci/cd 管道。我没有找到正确的文档来使用 ci/cd yaml 文件实施计划。是否可以在 .gitlab-ci.yaml 文件中配置管道运行计划(例如每天上午 08:00)?

谢谢阿伦

gitlab gitlab-ci gitlab-pipelines

9
推荐指数
1
解决办法
6270
查看次数

如何在gitlab“阶段”中定义规则,以便无需为作业定义单独的规则

假设分阶段定义了4个工作。

阶段:

  • 建造
  • 测试
  • 部署
  • 上传

现在测试、部署和上传仅在管道手动触发时运行。我们可以为此定义单独作业的规则,但它会重复。(不想使用它)

是否可以在“阶段”上定义规则,以便一个作业将在自动触发器上运行,其余 3 个作业将在管道的手动触发器上运行。

jobs git-stage gitlab gitlab-ci gitlab-pipelines

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

GitLab CI:避免每个作业重复的skip-ci

skip-ci目前,我正在复制每项工作的信息,如下所示

job1:
  except:
    variables:
      - $CI_COMMIT_MESSAGE =~ /skip-ci/
    ...
job2:
  except:
    variables:
      - $CI_COMMIT_MESSAGE =~ /skip-ci/
    ...
job3:
  except:
    variables:
      - $CI_COMMIT_MESSAGE =~ /skip-ci/
    ...
Run Code Online (Sandbox Code Playgroud)

有没有办法只写一次就可以适用于所有工作?

continuous-integration yaml gitlab gitlab-ci gitlab-pipelines

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

Gitlab ci 问题是通过触发器将工件传递到下游管道并需要关键字

我正在开发一个多管道项目,并使用trigger关键字触发下游管道,但我无法传递在上游项目中创建的工件。我用来needs获取这样的工件:

获取工件的下游管道块:

needs:
    - project: workspace/build
        job: build
        ref: master
        artifacts: true
Run Code Online (Sandbox Code Playgroud)

要触发的上游管道块:

build:
    stage: build
    artifacts:
    paths:
        - ./policies
    expire_in: 2h
    only:
    - master
    script:
    - echo 'Test'
    allow_failure: false

triggerUpstream:
    stage: deploy
    only:
    - master
    trigger:
    project: workspace/deploy
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

This job depends on other jobs with expired/erased artifacts:
Run Code Online (Sandbox Code Playgroud)

我不确定出了什么问题。

pipeline gitlab gitlab-ci gitlab-pipelines

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

在 Gitlab 管道中的条件手动阶段之后运行阶段

我正在尝试运行一个管道,其中最后阶段取决于前一个阶段,其中的作业是有条件的手动的。

我制作了这个示例 .gitlab-ci.yml 来演示这一点。我正在分三个阶段进行工作:

stages:
    - test
    - publish
    - create tag
Run Code Online (Sandbox Code Playgroud)

测试阶段有一项工作

# Tests Stage
run tests:
    stage: test
    script:
        - run the tests
Run Code Online (Sandbox Code Playgroud)

发布阶段的三个作业,都是手动的,仅在某些文件发生更改时存在

.publish:
    stage: publish
    script:
        - publish x
    rules:
        - changes:
            - $DIR/**/*
          when: manual


# Publish Stage
publish package a:
    variables:
        DIR: a
    extends:
        - .publish

publish package b:
    variables:
        DIR: b
    extends:
        - .publish

publish package c:
    variables:
        DIR: c
    extends:
        - .publish
Run Code Online (Sandbox Code Playgroud)

最后是“创建标签”阶段,我只想在其中一项发布作业完成时运行该阶段。

# Create Tag Stage
create tag …
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci gitlab-pipelines

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

如果同一作业正在前一个管道中运行,如何等待 GitLab 作业?

我们有一个要求,如果先前的管道具有处于运行状态的相同部署作业,则管道中的部署作业应该等待。因此,我们面临并发问题。例子:

  • 由于提交 > 作业名称 DEV 部署 -> 清理数据并部署,旧管道处于运行状态
  • 由于新提交,新管道处于运行状态 > 作业名称 DEV 部署 --> 现在,此干净数据将影响之前的管道部署。

我们希望等待新的管道特定作业,直到具有相同作业名称的前一个管道未完成。

GitLab 对此有什么解决方案吗?

我有一个解决方法来处理使用带有管道 API 的 before_script 。我正在执行的处理步骤:

  1. 对于新管道,首先检查当前管道 ID。
  2. 然后检查之前的管道是否不等于当前管道ID,状态是running还是pending。
  3. 然后获取当前管道部署作业名称。
  4. 然后检查之前运行的具有相同作业名称的管道。
  5. 如果是,则等待,否则跳过并移动以进行新部署。

任何不通过脚本处理的通用解决方案将受到高度赞赏。

gitlab gitlab-ci gitlab-pipelines

4
推荐指数
1
解决办法
4780
查看次数

coverage.misc.NoSource:没有代码源:'/usr/src/server/rep-1>'

我现在使用覆盖包已经有一段时间了,它运行良好,直到昨天,它只是在生成我认为的报告的水平上失败了。功能上没有任何变化,但更奇怪的是。

我有以下coveragerc文件:

[run]
source = .
branch = True
concurrency = multiprocessing
omit =
    manage.py
    config/asgi.py
    config/wsgi.py
    config/settings.py
    */migrations/*
    *test*

[report]
show_missing = True
skip_covered = True
Run Code Online (Sandbox Code Playgroud)

Django的manage.py文件如下:

import os
import sys


COVERAGE_ACCCEPTANCE = 85


def main():
    argv = sys.argv
    try:
        command = argv[1]
    except IndexError:
        command = "help"
    default_settings = "config.settings"
    running_tests = (command == "test")
    if running_tests:
        default_settings = "config.settings_test"
        from coverage import Coverage
        cov = Coverage()
        cov.erase()
        cov.start()
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", default_settings)
    try:
        from django.core.management import execute_from_command_line …
Run Code Online (Sandbox Code Playgroud)

python django coverage.py gitlab-pipelines

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