私信  •  关注

sytech

sytech 最近创建的主题
sytech 最近回复了
4 年前
回复了 sytech 创建的主题 » gitlab容器扫描程序无法安装aws cli

这个 container_scanning 作业(默认情况下) uses the docker image registry.gitlab.com/security-products/container-scanning:4

您还可以看到此图像将其用户指定为 gitlab ,这对我来说意味着图像中的用户与您传统使用的大多数图像不同,默认情况下没有root权限。

因此,该用户将没有写入的权限 /usr/local/

你可以通过使用 sudo

- sudo ./aws/install

(或者,如您所述,您可以使用将安装定向到另一个不需要提升权限才能写入的位置。) -i -b 安装程序的标志)。

4 年前
回复了 sytech 创建的主题 » Gitlab ci-如果给定文件已被修改,则在合并时显示警告

没有特定的方法在MR UI中引发自定义用户定义的警告/消息。然而,可能有一些解决方案对你有效。

使用代码所有者

你可以用 CODEOWNERS 还有 approval rule 这需要在修改所拥有的文件时获得代码所有者的批准。这样,每次修改您定义的文件时,MR UI中都会出现一条审批规则。但是,它不会包含任何类型的用户定义的消息。

自定义批准规则

另一种方法可能是定义一个名为“你更新配置了吗?”之类的描述性自定义批准规则然而,这并不取决于文件是否被修改;它会出现在每一位先生身上。

approval UI

自定义管道作业

您可以使用自定义管道作业来确定是否需要进行检查。原则上,这个管道作业可以在检测到文件已更改时对您的MR进行评论。或者甚至可以分析是否需要更改配置文件并使管道失败。

定制服务/webhook

对于与您描述的类似的用例,我为MR事件创建了一个批准规则和一个MR webhook,根据MR的内容,只要确定不需要人工批准,就会自动提供来自bot用户的批准。不过,这需要创建一个服务来响应Webhook。

换句话说:如果不需要任何操作,bot会为您批准MR(满足定制批准规则)。如果需要采取行动,机器人将什么也不做,这意味着人类必须进行批准才能满足批准规则。

类似于机器人用户的类似评论可能也适用于您的用例。

在MRs中呈现信息的其他方式

GitLab的其他一些功能会导致消息出现在UI中,因此您可以(ab)使用这些功能来显示自定义ish消息,例如:

  1. Metrics reports 在夫人
  2. SAST scanning 结果是MRs
  3. 也许还有其他人?
4 年前
回复了 sytech 创建的主题 » 可以在GITLAB CI目录中间使用通配符。yml

是的,您可以在路径段的中间使用通配符。GitLab使用Ruby的 fnmatch 用于测试 changes: .

irb(main):002:0> File.fnmatch('server-*-files/**/*', 'server-a-files/foo/bar')
=> true

你的docker版本已经过时了。您需要运行docker CE至少1.17.04或更高版本(这是支持 delegated 添加了模式,但理想情况下应该安装更新的版本)。

如评论中所述,您当前的版本是1.13.1,不支持此模式。

要解决这个问题,您应该更新docker版本。

4 年前
回复了 sytech 创建的主题 » 如何在gitlab中从python重写JSON文件

使用文件api文件对象。 Reference

f = project.files.get(file_path='README.rst', ref='main')
decoded_content = f.decode()
new_content = modify_content(decoded_content) # you implement this

# update the contents and commit the changes
f.content = new_content
f.save(branch='main', commit_message='Update file')

你可以用 json.dumps 获取新内容的字符串。

f.content = json.dumps(data)
f.save(...)
4 年前
回复了 sytech 创建的主题 » 如何从GitLab管道向电报发送通知?

发送通知的一种简单方法(尤其是当您使用多个服务或聊天时)是使用 apprise .

要发送到一个电报频道:

apprise -vv --body="Notify telegram chat" \
  tgram://bottoken/ChatID1 \

这使得一次从管道中通知多个服务变得很容易,而无需针对每个服务的API编写代码(apprise为您处理)。

image: python:3.9-slim # or :3.9-alpine if you prefer a smaller image
before_script:
  - pip install apprise # consider caching PIP_CACHE_DIR for performance
script: | 
  # Set a notification to multiple telegram chats, a yahoo email account, 
  # Slack, and a Kodi Server with a bit of added verbosity:
  apprise -vv --body="Notify more than one service" \
    tgram://bottoken/ChatID1/ChatID2/ChatIDN \
    mailto://user:password@yahoo.com \
    slack://token_a/token_b/token_c \
    kodi://example.com
4 年前
回复了 sytech 创建的主题 » 在Gitlab管道的多个阶段中使用$CI_JOB_ID作为常量

使用 $CI_PIPELINE_ID instaed,这将在管道中的所有工作中保持不变。

variables:
  MY_ENV_VAR: env_$CI_PIPELINE_ID

看见 predefined environment variables 以供补充参考。

如果确实希望在一个作业中创建环境变量,并在管道的其余部分保持不变,可以使用 artifacts:reports:dotenv .

stages:
    - stage1
    - stage2

set_env:
  stage: .pre
  script:
    echo "MY_ENV_VAR=env_$CI_JOB_ID" > .myenv
  artifacts:
    reports:
      dotenv: .myenv

stage1_build:
    stage: stage1
    script:
        - echo $MY_ENV_VAR
stage2_build:
    stage: stage2
    script:
        - echo $MY_ENV_VAR
4 年前
回复了 sytech 创建的主题 » 为什么Gitlab CI/CD中的flask应用程序中的测试阶段失败?

在GitLab中,您创建的每个工作都是在一个全新的环境中开始的。所以,你必须在每项工作中安装你的需求。

你的 test message-requests: job不采取任何步骤来安装Flask或其他依赖项。你应该添加这些步骤。

4 年前
回复了 sytech 创建的主题 » 如何在GitLab CI中检测在创建合并请求时触发了管道

我们能否检测到是什么事件触发了合并请求范围内的管道?

是的,这包含在预定义的 CI_PIPELINE_SOURCE 变量,如 frakman1 answered .

我需要WebHook访问这个信息吗?

这取决于你想做什么。如上所述,该信息作为预定义变量在管道中固有地可用。然而,应该注意的是,只有某些事件会触发 merge request pipelines 完全

例如,合并请求上的注释不会触发管道。如果你想对评论或状态变化做出反应,你可能需要一个webhook。

管道源信息在webhooks和 list pipelines API source
Webhooks在 X-Gitlab-Event 标题和 payload 有关活动的信息。

还有另一种方法来做我的团队正在努力做的事情吗?

Webhook可能比依赖管道内作业更可靠,因为Webhook可以捕获比作业/管道更多的事件。例如,Webhooks可以在根本没有创建管道的情况下向您发送通知。如果您的管道因某种原因被阻塞/超时,它也会起作用。

然而,缺点是您需要开发和托管自己的web应用程序来处理传入的Webhook。

有很多 project integrations 内置于GitLab中,用于直接向各种服务发送通知Webhook。不幸的是,莱弗不是其中之一。

如果你想从乔布斯那里发送通知,我发现 apprise 大大简化了这一过程 supports ryver .

基本模板作业可能如下所示:

.send_notification:
  image: python:3.9-slim
  before_script:
    - pip install apprise
  variables:
    RYVER_ORG: "YourOrganization"
    # Define RIVER_TOKEN in your CI/CD variables settings
    NOTIFICATION_TITLE: "Placeholder Title"
    NOTIFICATION_BODY: "Placehodler Body"
  script:
    - apprise -vv -t "${NOTIFICATION_TITLE}" -b "${NOTIFICATION_BODY}" "ryver:///${RYVER_ORG}/${RYVER_TOKEN}"

将工作与 when: on_failure when: on_success 可能很有用:

stages:
  - build
  - build_notification

build:
  stage: build
  script:
    - make build

notify_build_failure:
  stage: build_notification
  when: on_failure
  extends: .send_notification
  variables:
    NOTIFICATION_TITLE: "Failed - $CI_PROJECT_NAME pipeline $CI_PIPELINE_ID"
    NOTIFICATION_BODY: "The build failed for the pipeline. See $CI_PIPELINE_URL"


notify_build_success:
  stage: build_notification
  when: on_success # the default
  extends: .send_notification
  variables:
    NOTIFICATION_TITLE: "Build Success - $CI_PROJECT_NAME pipeline $CI_PIPELINE_ID"
    NOTIFICATION_BODY: "The build has succeeded. See $CI_PIPELINE_URL"

或者使用默认值 after_script 即使作业失败也会运行。这是一个简单的方法,让你的 ryver.sh 脚本在每次作业后进行评估。脚本逻辑可以确定是否发送通知以及通知的内容。

default:
  after_script:
    - ./ryver.sh
4 年前
回复了 sytech 创建的主题 » django-限制前一个密码中出现“n”或更多字符

不,这在使用哈希密码时是不可能的。存储散列的全部意义在于不存储密码。

你可以阻止 准确的 与以前的密码匹配,但不是近似/模糊匹配。

不要试图以可逆状态、加密或其他方式存储密码。这样做的网站有一个耻辱大厅。加密密码是非常困难的 仅仅 比以明文存储更安全,而且实际上根本不安全。没有理由这么做。