我尝试做一个非常基本的 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 的变量的直观方式似乎很常见。
但它就是行不通。请好心人向我解释如何实现我的目标吗?
我希望我的 FastAPI 应用程序能够访问始终实际bot_data
的python-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
文档中的解释对我来说不清楚。我的 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) deployment ×1
devops ×1
docker ×1
fastapi ×1
gitlab-ci ×1
openapi ×1
python-3.x ×1
rest ×1
swagger ×1
telegram ×1