你好,
你们有没有关于以 CI/CD 方式部署主题的建议?客户期望每两周发布一次新主题,我们希望通过自动化流程来发布主题。我们使用的是 Discourse Docker。
我们希望避免每次发布时进行手动安装。
附注:我不确定这是否是一个 bug,但似乎第一次安装主题时分支并未被保存。(需要再次确认以验证)
谢谢
你好,
你们有没有关于以 CI/CD 方式部署主题的建议?客户期望每两周发布一次新主题,我们希望通过自动化流程来发布主题。我们使用的是 Discourse Docker。
我们希望避免每次发布时进行手动安装。
附注:我不确定这是否是一个 bug,但似乎第一次安装主题时分支并未被保存。(需要再次确认以验证)
谢谢
该功能已经存在。如果您通过 Git 仓库安装主题,只需单击一次即可将主题更新到最新的提交版本。
我知道,但那不是我们想要的方式。
我们希望在不触碰 Discourse 管理员的情况下实现动态流程。我考虑使用 themes 命令:discourse/lib/tasks/themes.rake at main · discourse/discourse · GitHub
docker exec -it app rails themes:install -- # 主题数据
我不确定该命令是否能读取文件。例如,一个包含主题安装信息的 theme.yaml 文件。
该文件可以部署到共享文件夹中,docker 命令可以从中读取并安装主题或进行更新。
@markvanlan 最近做了一些工作,可能对您有用
https://github.com/discourse/discourse/commit/f07c4a781c6c054e5d2dc05ab6c0fd0b6cbb0645
此处注释中包含一些使用说明:
我想你应该将其管道传递给 STDIN,类似这样:
cat theme_config.yml | bin/rake themes:install
但我尚未测试过。如果对你有效,请告诉我们 ![]()
你的方法完全可行。谢谢!我的不行。![]()
我稍微尝试了一下修改 themes.rake,添加了
rake themes:install themeFile="theme.yml"
以及这段代码:
task "themes:install" => :environment do |task, args|
if ENV['themeFile']
theme_args = YAML.load_file(ENV['themeFile'])
else
theme_args = (STDIN.tty?) ? '' : STDIN.read
use_json = theme_args == ''
theme_args =
begin
use_json ? JSON.parse(ARGV.last.gsub('--', '')) : YAML::load(theme_args)
rescue
puts use_json ? "无效的 JSON 输入。\n#{ARGV.last}" : "无效的 YML:\n#{theme_args}"
exit 1
end
end
log, counts = ThemesInstallTask.install(theme_args)
puts log
puts
puts "结果:"
puts " 已安装:#{counts[:installed]}"
puts " 已更新:#{counts[:updated]}"
puts " 错误:#{counts[:errors]}"
if counts[:errors] > 0
exit 1
end
end
运行正常。![]()
如何为这个文件运行 spec 测试?
你应该能够执行以下操作:
bin/rake themes:install theme.yml
我添加了对传入 JSON 的支持,但此代码最初设计为接受 yml 文件作为参数。
它报错说这不是有效的 JSON
无效的 JSON 输入。
theme.yml
我的 theme.yml 文件内容如下
test:
url: "https://github.com/discourse/discourse-faria-theme"
我相信这应该能行!我会去查一下为什么现在不工作了。
好的,正确的格式是 bin/rake themes:install < theme.yml。我会在代码中更好地记录这一点 ![]()
太好了!谢谢!很高兴能帮上一点忙 ![]()