小编Art*_*kov的帖子

常规作业的“if”语句中的 $CI_COMMIT_TAG

我尝试做一个非常基本的 GitLab CI 工作。
我想要:
当我推送到开发时,gitlab 会使用标签“develop”构建 docker 镜像
当我推送到 main 时,gitlab 检查当前提交是否有标签,并用它构建镜像,否则不会触发作业。

Build and publish docker image:
  stage: build
  rules:
    - if:
        ($CI_COMMIT_BRANCH == "main" && $CI_COMMIT_TAG && $CI_PIPELINE_SOURCE == "push")
      variables:
        TAG: $CI_COMMIT_TAG
    - if:
        ($CI_COMMIT_BRANCH == "develop" && $CI_PIPELINE_SOURCE == "push")
      variables:
        TAG: develop
  script:
    - echo $TAG
    - ...<another commands>
Run Code Online (Sandbox Code Playgroud)

但它并没有按预期工作。$CI_COMMIT_TAG - 为空。尽管触发作业(合并提交)的提交有标签。

我发现我发现的解释并不能帮助使用“if”语句实现我的目标。基于此处建议的工作流程的
解决方案也没有帮助。

使用名为 COMMIT_TAG 的变量的直观方式似乎很常见。
但它就是行不通。请好心人向我解释如何实现我的目标吗?

deployment docker gitlab-ci gitlab-ci-runner devops

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

如何在同一运行事件循环中运行另一个应用程序?

我希望我的 FastAPI 应用程序能够访问始终实际bot_datapython-telegram-bot。我需要这个,所以当我调用 FastAPI 中的某个端点时,可以将消息发送到所有聊天,存储在bot_data.

据我了解这个问题:bot.run_polling()uvicorn.run(...)启动两个独立的异步循环。我需要将它们整合在一起运行。

UPD-1:
感谢@MatsLindh,我创建了下一个函数,我将其传递给块,但它的工作不一致。有时bot.run_polling()(获得正确的循环并且一切正常,但其他时候并因存在不同循环的错误而中断):

import asyncio
from uvicorn import Config, Server
# --snip--
def run(app: FastAPI, bot:Application):
    # using get_event_loop leads to:
    # RuntimeError: Cannot close a running event loop
    # I guess it is because bot.run_polling()
    # calls loop.run_until_complete() different tasks
    # loop = asyncio.get_event_loop()
    loop = asyncio.new_event_loop()
    server = Server(Config(app=app, port=9001))
    loop.create_task(server.serve())

    t = Thread(target=loop.run_forever)
    t.start()

    bot.run_polling()

    t.join() …
Run Code Online (Sandbox Code Playgroud)

python-3.x python-asyncio telegram python-telegram-bot fastapi

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

Swagger 中鉴别器内的映射有什么作用?

文档中的解释对我来说不清楚。我的 api 文档渲染后没有看到任何差异。
视觉上有什么区别?从逻辑上讲,映射是做什么的?例如

MySchema:
  oneOf:
    - $ref: '#/componets/schemas/SubSchema1'
    - $ref: '#/componets/schemas/SubSchema2'
  discriminator:
    propertyName: some_property:
    mapping:
      TypeA: '#/componets/schemas/SubSchema1'
      TypeB: '#/componets/schemas/SubSchema2'
Run Code Online (Sandbox Code Playgroud)

documentation rest swagger openapi

0
推荐指数
1
解决办法
2437
查看次数