使用travis和heroku进行连续部署

2024-05-29 03:41:45 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

我目前正在设置Travis来运行我们的测试,如果测试成功就部署它。这很直接,但我不想在满足这些条件时部署:

 - The time is between 07:00 and 22:00 (workdays)
 - During the deploy the database has to migrate or elastic search has to index

因为迁移或索引可能非常昂贵并且意味着停机。我使用的是heroku提供程序,使用on参数非常简单,但是我遇到了以下情况:

^{pr2}$

5分钟后

^{3}$

通缉情况

所以我真正想要的是计划/延迟部署。当Travis检测到需要运行一个昂贵的操作时,它会安排一个部署,所有后续构建都会跳过部署,直到使用昂贵的脚本完成部署。部署应该在工作时间以外的任何地方自动启动。在


我希望我已经描述清楚了,如果需要更多的信息请告诉我!在


Tags: andthetotravistimeis部署情况
1条回答
网友
1楼 · 发布于 2024-05-29 03:41:45

好吧,在特拉维斯的同事们的大力帮助下,我想出了以下解决方案:

  1. 我已经激活了CronJobs,并将它们设置为每天运行。在编写本文时,您不能指定cron的运行时间,而是在您创建cron时对其进行调度。所以在半夜里创建一个cron,它每晚运行。

  2. 让git检查迁移/索引文件在过去24小时内是否有任何更改,如果有,则跳过部署。

  3. 检查travis事件类型,只有在cron运行时才执行索引/迁移。

  4. 利润。

代码

deploy:
  - provider: heroku
    skip_cleanup: true
    api_key: "${HEROKU_API_KEY}"
    app: cd-test
    on:
      # Condition is: cron job + migration and/or index necessary
      condition: "$TRAVIS_EVENT_TYPE == 'cron' && $(git log  since='yesterday 23:00'  format=oneline   **/migrations/* **/search.py | wc -l) -gt 0"
    run:
      - "python manage.py migrate"
      - "python manage.py collectstatic  noinput"
      - "python manage.py index"

  - provider: heroku
    skip_cleanup: true
    api_key: "${HEROKU_API_KEY}"
    app: cd-test
    on:
      # Condition is: not cron job + no migration and/or index necessary
      condition: "$TRAVIS_EVENT_TYPE != 'cron' && $(git log  since='yesterday 23:00'  format=oneline   **/migrations/* **/search.py | wc -l) == 0"
    run:
      - "python manage.py collectstatic  noinput"

相关问题 更多 >

    热门问题