zcuric
(Zdravko)
21 أبريل 2020، 9:30ص
1
مرحبًا،
هل لديكم اقتراحات حول كيفية تنفيذ نشر السمات (Themes) بطريقة CI/CD؟ يتوقع العميل إصدارات جديدة من السمة كل أسبوعين، ونود تنفيذ نشر السمة عبر عملية مؤتمتة. نحن نستخدم Discourse Docker.
نود تجنب التثبيت اليدوي في كل إصدار.
ملاحظة جانبية: لا أعرف ما إذا كان هذا خطأ، ولكن يبدو أن الفرع لا يتم حفظه عند أول تثبيت للسمة. (سأحتاج إلى التحقق من ذلك للتأكد)
شكرًا لكم
fzngagan
(Faizaan Gagan)
21 أبريل 2020، 9:52ص
2
إنه موجود بالفعل. إذا قمت بتثبيت قالب عبر مستودع git، فيمكنك تحديث القالب إلى أحدث إصدار في نقرة واحدة.
zcuric
(Zdravko)
21 أبريل 2020، 10:09ص
3
أعلم ذلك، لكن هذه ليست الطريقة التي نرغب في اتباعها.
نريد عملية ديناميكية دون الحاجة إلى لمس لوحة إدارة Discourse. كنت أفكر في استخدام أمر الثيمات الموجود في discourse/lib/tasks/themes.rake at main · discourse/discourse · GitHub
docker exec -it app rails themes:install -- # بيانات الثيم
لا أعرف ما إذا كان هذا الأمر قادرًا على قراءة الملفات. على سبيل المثال، ملف theme.yaml الذي يحتوي على معلومات الثيم للتثبيت.
يمكن نشر هذا الملف في مجلد مشترك، ومن ثم قراءة أمر Docker له من هناك لتثبيت الثيم أو إجراء التحديثات.
david
(David Taylor)
21 أبريل 2020، 10:19ص
4
@markvanlan قام مؤخرًا ببعض الأعمال التي قد تكون مفيدة لك
committed 02:17PM - 14 Apr 20 UTC
توجد بعض معلومات الاستخدام في التعليقات هنا:
#
# 2 different formats are accepted:
#
# == JSON format
#
# bin/rake themes:install -- '--{"discourse-something": "https://github.com/discourse/discourse-something"}'
# OR
# bin/rake themes:install -- '--{"discourse-something": {"url": "https://github.com/discourse/discourse-something", default: true}}'
#
# == YAML file formats
#
# theme_name: https://github.com/example/theme.git
# OR
# theme_name:
# url: https://github.com/example/theme_name.git
# branch: "master"
# private_key: ""
# default: false
# add_to_all_themes: false # only for components - install on every theme
#
This file has been truncated. show original
zcuric
(Zdravko)
21 أبريل 2020، 10:24ص
5
@david شكرًا لك، لكن يبدو لي غير واضح ما إذا كان بإمكاني وضع مسار الملف كحجة. هل سيؤدي هذا العمل؟
bin/rake themes:install -- theme.yaml
ربما يمكنني التجربة.
david
(David Taylor)
21 أبريل 2020، 10:29ص
6
أعتقد أنك ستوجهه إلى الإدخال القياسي (STDIN)، لذا شيء مثل
cat theme_config.yml | bin/rake themes:install
لكنني لم أجرب ذلك. أخبرنا إذا نجح الأمر معك
zcuric
(Zdravko)
21 أبريل 2020، 11:21ص
7
طريقتك تعمل بشكل جيد. شكرًا لك! طريقتي لا تعمل.
لقد جربتُ قليلًا عن طريق تعديل 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 ? "Invalid JSON input. \n#{ARGV.last}" : "Invalid YML: \n#{theme_args}"
exit 1
end
end
log, counts = ThemesInstallTask.install(theme_args)
puts log
puts
puts "Results:"
puts " Installed: #{counts[:installed]}"
puts " Updated: #{counts[:updated]}"
puts " Errors: #{counts[:errors]}"
if counts[:errors] > 0
exit 1
end
end
يعمل بشكل ممتاز.
كيف يمكنني تشغيل الاختبارات (spec) لهذا الملف؟
يجب أن تتمكن من القيام بالتالي:
bin/rake themes:install theme.yml
لقد أضفت دعمًا لتمرير JSON، لكن هذا الكود صُمم في الأصل لاستقبال ملف yml كحجة.
zcuric
(Zdravko)
21 أبريل 2020، 12:30م
9
يُرجح أن السبب هو أن المدخلات ليست صالحة بصيغة JSON
مدخلات JSON غير صالحة.
theme.yml
ملف theme.yml الخاص بي
test:
url: "https://github.com/discourse/discourse-faria-theme"
أعتقد أن هذا يجب أن يعمل! سأبحث في السبب وراء عدم عمله بعد الآن.
حسنًا، التنسيق الصحيح هو bin/rake themes:install < theme.yml. سأقوم بتوثيق ذلك بشكل أفضل في الكود
zcuric
(Zdravko)
21 أبريل 2020، 1:14م
12
رائع! شكرًا لك! يسعدني أنني استطعت المساعدة قليلًا