บูรณาการอย่างต่อเนื่องสำหรับ Ruby on Rails? [ปิด]


149

ฉันค้นหาโซลูชันการรวมอย่างต่อเนื่องสำหรับ Ruby on Rails แต่ไม่พอใจกับผลลัพธ์มากเกินไป ฉันมาจากร้าน. NET ที่ใช้ CruiseControl.NET และรู้สึกแย่มากกับความสะดวกในการใช้งานและสถานะ / การรายงานที่หลากหลาย

เป็นการดีที่ฉันกำลังมองหา:

  • Git / SVN และ Test :: Unit Integration ที่เห็นได้ชัด

  • การรวมเข้ากับ Rake และ / หรือ Capistrano

  • เว็บอินเตอร์เฟสแสดงสถานะของบิลด์

  • แจ้งเตือนทางอีเมลของการสร้างล้มเหลว

  • การแจ้งเตือนบนเดสก์ท็อป (อาจผ่าน Growl)

  • REST API สำหรับสถานะบิลด์

  • เฟรมเวิร์กปลั๊กอินสำหรับการเรียกใช้เครื่องมือวิเคราะห์รหัสอื่น ๆ และรายงานผลใน UI


11
ดังนั้นสิ่งที่คุณเลือกในขณะนี้สามปีต่อมา?
Andrei

3
ฉันขอแนะนำcircleci.com ได้ไหม
Paul Biggar

คำตอบ:


83

ฉันเพิ่งผ่านตัวเลือกที่นี่และคิดว่าฉันจะม้วนพวกเขา ณ สิ้นปี 2011

ความสมบูรณ์

หลังจากประสบการณ์ใกล้ตายที่เหลือยังคงเชื่อมโยงไปยังเว็บไซต์ที่มีข้อมูลที่ล้าสมัยและกระดกเว็บไซต์สาธิตโครงการนี้มีจุดประกายของชีวิตอีกครั้ง แต่เอกสารยังไม่ได้ย้ายและจำนวนมากและจำนวนของขั้นตอนในการกวดวิชาเป็นเพียงเสียธรรมดา ; ฉันมีการเปลี่ยนแปลงการอ้างอิงถึงอัญมณีสร้างบางสิ่งบางอย่างออกจากวงและจากนั้นผมก็ยังไม่สามารถที่จะได้รับมันทำงาน

Cruise Control.rb

ง่ายเกินไป: คุณเพียงแค่ดาวน์โหลดรันบรรทัดคำสั่งเพื่อเพิ่มโครงการของคุณ ( ไม่มี UIสำหรับการทำเช่นนั้น) และรันแอพ Rails แต่ไม่มี UI สำหรับการแก้ไขโครงการของคุณและไม่มีการรวมกับส่วนสร้างอย่างแท้จริงนอกเหนือจากการแสดงลิงก์ไปยังพวกเขา: คุณไม่ได้รับกราฟของการทดสอบที่รันไม่มีเทรนด์ไลน์ ฯลฯ ฉันต้องปรับroutes.rbไฟล์เพื่อให้ได้ การเชื่อมโยงโค้ดใช้งานได้ ( resources :projectsสายต้องเลื่อนตามเส้นทางอื่นที่ไม่ใช่ค่าเริ่มต้นด้านล่าง)

TeamCity

สิ่งนี้ดูยอดเยี่ยม แต่มาตราส่วนการจ่ายเงินดูเหมือนว่าจะไม่ตี 3 เอเจนต์ฟรีและเมื่อคุณขึ้นอยู่กับว่าคุณจำเป็นต้องทำเงินหลายร้อยดอลล่าร์ ส่วนบุคคลสร้างรูปลักษณ์ที่ดี แต่ไม่ได้มีงบประมาณ

เจนกินส์ (née ฮัดสัน )

นี่คือกำยำ Java และมันจะโหลดขึ้นกับพันตัวเลือกเพื่อให้UI เป็นความสับสนและมันเป็นงานที่น่าเบื่อในการตั้งค่าโครงการของคุณ แต่เมื่อคุณตั้งค่าคุณจะได้รับปลั๊กอินจำนวนมากที่สามารถดึงได้จากทุกที่เรียกใช้ส่วนใหญ่และรายงานทุกอย่าง ตัวติดตั้ง OS X ชี้ Jenkins ที่/Users/Shared/Jenkins/Homeแต่ไม่สามารถสร้างไดเรกทอรีchownนั้นหรือไปที่daemon(ซึ่งใช้โดยค่าเริ่มต้นและคุณควรเปลี่ยนเป็นjenkinsผู้ใช้ใหม่เพื่อให้คุณสามารถตั้งค่าการรวม GitHub)

คนอื่น ๆ

ฉันไม่ได้ลองสิ่งเหล่านี้จริงๆ แต่คิดว่าฉันจะพูดถึงสาเหตุ:

  • CI Joeต้องการเป็นเจ้าของ GitHub repo มากกว่าที่ฉันต้องการและผู้สร้างมันไม่ได้ใช้มัน พวกเขาอยู่ในเจนกินส์
  • Cerberusดูเหมือนจะเล็ก แต่ไม่มี UI และไม่เผยแพร่สิ่งประดิษฐ์ที่ผู้อื่นสามารถเห็นได้โดยอัตโนมัติ
  • ดูเหมือนว่าBigTunaจะเป็น CruiseControl.rb โดยไม่มีการสนับสนุนจากชุมชน (ขั้นต่ำสุดแล้ว)
  • Bambooดูเรียบร้อยดีถ้าคุณใช้ JIRA และ BitBucket แต่เราไม่ได้ใช้ มันปรับใช้ แต่เรามีการตั้งค่าใน Capistrano แล้ว

ตัวเลือก

เราไปกับเจนกินส์แต่ฉันหวังว่าหนึ่งในโซลูชันน้ำหนักเบานั้นได้ผลจริง


8
เทรวิสล่ะ?
Vanuan

3
ฉันทำงานในโครงการโอเพนซอร์ซดังนั้นถ้าฉันไม่เข้าใจเอกสาร (คำพูดไม่ดี) ของพวกเขาเทรวิสไม่ใช่ตัวเลือกสำหรับเราจริงๆ ถ้าฉันเขียนพลอยบางอันฉันก็จะกระโดดขึ้นไปบนเทรวิสทันที แต่ไม่ใช่สำหรับเว็บไซต์ Rails จริงๆ
TALlama

2
สำหรับบันทึกเทรวิส CI จะเปิดตัวรุ่น PRO (จ่ายและส่วนตัว) ในไม่ช้าที่มีอยู่แล้วในรุ่นเบต้า มันเป็นเรื่องเล็กน้อยในราคาแพงสำหรับโครงการขนาดเล็กที่ $ 129 และ $ 249 ต่อเดือน แต่มันก็คุ้มค่าที่จะดู: travis-ci.com
Joshua Pinter

41

วิธีการเกี่ยวกับCruiseControl.rb ?

เดียวกันฝูงชนที่ไม่CruiseControl(ThoughtWorks) Rubyและการเขียนใน ใช้งานง่ายมากในRakeการรวมเครื่องมืออื่น ๆ ของคุณและสามารถใช้อัญมณีruby-growlสำหรับการแจ้งเตือนของคุณ


ฉันมีปัญหาในการทำให้หน้าต่างทำงาน ... ไม่ทำงานตามที่โฆษณาไว้ในวิดีโอ 'มันไม่ง่ายขนาดนั้น' ในเว็บไซต์สำหรับฉัน
Gishu

ฉันจะไม่โดนอิทธิพลจากการสร้างแบรนด์ความคิด - ตัดสินด้วยความดี
Dafydd Rees

โครงการนี้เพิ่งได้รับการบำรุงรักษาเมื่อไม่นานมานี้และยังไม่ได้เปิดตัวเวอร์ชั่นใหม่ตั้งแต่ปี 2009 ... แต่ก็ใช้งานได้ ..
Scott Schulthess

3
cruisecontrol นั้นเป็นแบบดั้งเดิมและล้าสมัยมาก
bragboy

1
จากเหตุการณ์ที่เกี่ยวข้องกับความปลอดภัยจนถึงต้นเดือนกุมภาพันธ์ (2013) การทิ้ง CruiseControl.rb ไว้ในการกำหนดค่าเริ่มต้น (รุ่น Gem และอื่น ๆ ) นั้นไม่มีเหตุผล ฉันสามารถทำให้มันทำงานภายใต้ Rails 3.0.20 ได้ แต่ดูเหมือนว่า 3.2.11+ จะใช้งานได้มากกว่าเดิมมาก ณ จุดนี้ผมมากเปิดให้ทางเลือกกับรายการที่ต้องการคล้ายกันมากกับจิม Fiorato ของ
Jeff Dickey

27

นอกจากนี้คุณยังอาจต้องการพิจารณาฮัดสัน มันถูกออกแบบมาเพื่อใช้กับโปรเจ็กต์ Java แม้ว่าจะมีปลั๊กอินให้เลือกมากมายรวมถึงการสนับสนุนสำหรับ Ruby และ Rake มันมีเว็บอินเตอร์เฟสที่มีประโยชน์มากและรองรับการแจ้งเตือนทางอีเมลรวมถึงอื่น ๆ อีกมากมาย (เช่น twitter หรือโคมไฟหมียักษ์)

ชุมชนมีการใช้งานมากและมีบทความหลายบทความเกี่ยวกับการฮัดสันกับ Selenium ซึ่งคุณอาจเป็นประโยชน์สำหรับการทดสอบแอปพลิเคชั่น Rails ทางฝั่งเบราว์เซอร์

อีกมุมมองหนึ่งคือTeam Cityซึ่งฟรีสำหรับโครงการขนาดเล็กและทีม (รวมถึงการค้า) ฉันชอบ Team City และเคยใช้มาก่อนสำหรับโครงการอื่น ๆ แต่ปัจจุบันเราใช้ Mercurial สำหรับการควบคุมแหล่งที่มาและการสนับสนุนของ Team City นั้นค่อนข้างเบต้าเกินไปเมื่อเราพิจารณา

ฉันเปลี่ยนจาก CruiseControl.net เป็น Team City และรู้สึกตกใจกับการปรับปรุงอย่างมาก ฉันเป็นส่วนหนึ่งของฮัดสันเนื่องจากชุดคุณลักษณะที่คล้ายกันและชุมชนที่แอคทีฟมาก


2
+1 สำหรับ TC มอบ CI ที่ดีที่สุดที่ฉันเคยเห็น
Matt Briggs

4
ได้รับการเตือนว่ามีบางสิ่งทางการเมืองที่เกิดขึ้นกับฮัดสันเนื่องจากเอ่อเราจะเรียกมันว่าความแตกต่างที่สร้างสรรค์กับ Oracle นักพัฒนาส่วนใหญ่ดูเหมือนจะเคลื่อนไหวด้วยส้อมซึ่งจะเรียกว่าเจนกินส์ ออราเคิลมีพนักงานและจะให้การสนับสนุนและพัฒนาฮัดสันต่อไป
dondo

4
จุดดี dondo สำหรับผู้ที่สนใจติดตามการพัฒนาอย่างต่อเนื่องของฮัดสันคุณสามารถตรวจสอบเจนกินส์ได้ที่jenkins-ci.org
Julian

และนี่เป็นการเปรียบเทียบกิจกรรมการพัฒนา Jenkins vs Hudson: ohloh.net/p/compare?project_0=Jenkins&project_1=Hudson
Vanuan

13

Circleเป็นบริการ CI ขั้นสูงสำหรับ Rails (และเว็บแอปอื่น ๆ ) จากรายการของคุณมันรองรับสิ่งต่อไปนี้:

  • Git และการทดสอบ :: การรวมหน่วย ( เช่นการรวม RSpec, แตงกวา, จัสมิน, การรวม Konacha และสนับสนุนคำสั่งการทดสอบพิเศษตามอำเภอใจ )
  • การรวมเข้ากับ Rake และ / หรือ Capistrano ( ใช้ Rake เพื่อเรียกใช้คำสั่งและตั้งค่าฐานข้อมูลสนับสนุนการปรับใช้อย่างต่อเนื่องโดยใช้ Capistrano หรือ Heroku หรืออะไรก็ตาม )
  • เว็บอินเตอร์เฟสแสดงสถานะของบิลด์
  • แจ้งเตือนทางอีเมลของการสร้างล้มเหลว
  • การแจ้งเตือนบนเดสก์ท็อป ( ผ่าน CCMenu / CCTray )
  • REST API สำหรับสถานะบิลด์
  • เฟรมเวิร์กปลั๊กอินสำหรับการเรียกใช้เครื่องมือวิเคราะห์รหัสอื่น ๆ และรายงานผลใน UI ( เราสามารถเรียกใช้คำสั่งและการสนับสนุนโดยพลการรวมถึงสถานะเป็นส่วนหนึ่งของบิลด์ )

Joel และฉันใช้เวลาสักครู่พูดคุยเกี่ยวกับสิ่งนี้ในพอดคาสต์ Stackoverflow - ลองดูสิ!


(แก้ไข) ข้อจำกัดความรับผิดชอบ: Paul Biggar ก่อตั้ง Circle ในขณะที่ระบุในโปรไฟล์ Stackoverflow ของเขา


8

สัญญาณเป็นแอพ CI ที่โฮสต์ใหม่สำหรับแอพ Ruby and Rails มันทำงานร่วมกับ GitHub ไม่จำเป็นต้องติดตั้งและมี UI ที่เรียบง่าย


เราใช้เซมาฟอร์เป็นส่วนหนึ่งของชุด CI และมันใช้งานได้ยอดเยี่ยม คุณสามารถดูวิธีการที่จะบูรณาการกับซอฟแวร์อื่น ๆ เช่นจัสมินและ HipChat ในหนึ่งของเราบล็อกโพสต์ op ยังกล่าวถึงการใช้ Capistrano เป็นเครื่องมือปรับใช้ เราใช้มันในอดีต แต่มันก็ช้าเกินไปสำหรับเราเพื่อให้เราเปลี่ยนไปMina
denis.arunovic

8

อัปเดตเมื่อ ก.พ. 2558

Codeship

ไม่มีการพัฒนาของ Drone.io ดังนั้นฉันจึงเปลี่ยนไปใช้ Codeship และฉันสนุกกับมันอย่างถี่ถ้วน มันพัฒนาและปรับปรุงอย่างแข็งขันมีการออกแบบที่ยอดเยี่ยมและรวดเร็วมาก นอกจากนี้สำหรับระดับล่างสุดมันฟรี (มากถึง 100 ชิ้นต่อเดือน) ดังนั้นราคาจึงถูกกว่า Drone.io

คำตอบเดิม

Drone.io

ฉันเพียงแค่ติดตั้งทับทิมหลักของเราในการประยุกต์ทางรถไฟกับhttp://drone.io/ เป็นเค้กชิ้นหนึ่งและมีส่วนต่อประสานที่ยอดเยี่ยม ผมว่ามูลค่าการตรวจสอบหากคุณกำลังมองหาง่ายเจ้าภาพแก้ปัญหา


7

ตรวจสอบTddium Tddium รองรับการผนวกรวมการปรับใช้และการทดสอบเชิงโต้ตอบของแอปพลิเคชัน Ruby มันมีสภาพแวดล้อมที่มีการจัดการด้วยการสนับสนุน Selenium, Headkit Webkit และ Solr มันเป็นเจ้าภาพอินสแตนซ์ Postgres, MySQL, Mongo และ Redis สด และมันจะทำการทดสอบชุดใหญ่ขนานโดยอัตโนมัติ


5
เจย์คุณอาจต้องการเปิดเผยความสัมพันธ์ของคุณกับห้องทดลอง tddium และ solano ตามคำถามที่พบบ่อย : "คุณต้องเปิดเผยความร่วมมือในคำตอบของคุณ"
tgf

7

Travis CI ได้รับความนิยมในโลกทับทิม: http://travis-ci.org/


Travis CI นั้นดีสำหรับโครงการโอเพ่นซอร์ส แต่ไม่ใช่สำหรับโครงการโอเพ่นซอร์สจริง ๆ Jenkins สามารถครอบคลุมทั้งสองกรณี :-)
Gabor Garami

1
แต่ไม่ได้เปิดแหล่งที่มา? github.com/travis-ci/travis-ciคุณไม่สามารถตั้งค่าอินสแตนซ์เทรวิสส่วนตัวของคุณเช่นเดียวกับเจนกินส์ใช่ไหม
Vanuan

คุณอาจทำได้ แต่ใน Readme พวกเขาแนะนำให้ต่อต้านและพูดถึงว่ามันยังไม่เหมาะสำหรับโฮสติ้งส่วนตัว
แอนดรู

ตอนนี้มันใช้ได้แล้วสำหรับโครงการปิด
aehlke


6

เช่นเดียวกับจำนวนของคนที่ผมเป็นแฟนตัวยงของ cruisecontrol.rb แต่ได้เปลี่ยนเมื่อเร็ว ๆ นี้โครงการของฉันจะซื่อสัตย์

น้ำหนักเบาและติดตั้งง่าย (เหมือน cc.rb) แต่มีอินเทอร์เฟซที่ดีกว่า


5
ฉันพยายามตั้งค่า Integrity และเป็นระเบียบ
อเรนซ์

5

BigTuna - เขียนด้วย Ruby ใช้ Rails และใช้มันเป็น CI


3
โปรดทราบว่าลิงก์ appelier.com สำหรับ BigTuna เป็นลิงค์ที่ตายไปยังโดเมนที่หมดอายุ โครงการในขณะนี้สามารถพบได้บน Github
Jeff Dickey

5

คุณสามารถให้Codeshipหมุนและดูว่ามันเหมาะกับคุณหรือไม่ (ฉันเป็นหนึ่งในผู้ก่อตั้ง)

การรวมและการปรับใช้อย่างต่อเนื่องบนคลาวด์ (พร้อมการสนับสนุน Heroku พิเศษ)

รายการสี่รายการแรกของคุณมีการใช้งานแล้วและทำงานได้ดีสำหรับ บริษัท หลายแห่ง

  • Git / SVN และ Test :: Unit Integration ที่เห็นได้ชัด
  • การรวมเข้ากับ Rake และ / หรือ Capistrano
  • เว็บอินเตอร์เฟสแสดงสถานะของบิลด์
  • แจ้งเตือนทางอีเมลของการสร้างล้มเหลว

เรากำลังทำงานกับคุณสมบัติเหล่านั้นเช่นกัน:

  • การแจ้งเตือนบนเดสก์ท็อป (อาจผ่าน Growl)
  • REST API สำหรับสถานะบิลด์
  • เฟรมเวิร์กปลั๊กอินสำหรับการเรียกใช้เครื่องมือวิเคราะห์รหัสอื่น ๆ และรายงานผลใน UI



3

ทำด้วยตัวคุณเอง. เขียนสคริปต์ทุบตีเพื่อเรียกใช้การทดสอบแล้วเรียกใช้กระบวนการปรับใช้หากการทดสอบผ่าน ต้องการการแจ้งเตือน? ยิงอีเมลธรรมดา ๆ ไปที่ความสำเร็จ / ล้มเหลว ต้องการกำหนดการ? cronjob นี่คือ $ 0 / mo. และคุณจะได้รู้ว่าคุณกำลังทำอะไรอยู่ ฉันไม่เห็นว่าการจ่ายเงินให้ใครสักคน $ 40 / เดือนจะช่วยให้ฉันทำสิ่งนี้ได้อย่างมีประสิทธิภาพมากขึ้น

พิจารณาตัวอย่าง: การปรับใช้ของฉันล้มเหลวเนื่องจากไปป์ไลน์ของสินทรัพย์ที่กำหนดค่าไม่ถูกต้อง (สินทรัพย์ไม่สามารถคอมไพล์ล่วงหน้า) สิ่งนี้จะไม่ถูกจับด้วยหน่วยการทำงานการรวมการถดถอยหรือการทดสอบอื่น ๆ ข้อผิดพลาดนี้จะไม่ถูกจับโดย CI จำนวนเวลาที่ฉันจะใช้ในการเขียนสคริปต์ทุบตีน่าจะน้อยกว่าจำนวนเวลาที่ฉันจะใช้ในการตั้งค่าสภาพแวดล้อม CI และฉันจะประหยัดเองได้ $ 40 / เดือน

Juuuuuust โยนเงินสองเหรียญของฉันไปที่การสนทนา )


1

เรียกใช้การเรียกใช้รหัสอาจเป็นสิ่งที่คุณต้องการ

แก้ไข: ลิงก์ถูกลบเนื่องจากไม่ได้อ้างถึงไซต์ Run Code Run เดิมอีกต่อไป


1
ตอนนี้กำลังจะปิดตัวลง :(
Andrew Grimm

1

จากนั้นมีCI Joe :

มันเหมือนรถปิคอัพเก่าที่มีสนิม: มันอาจจะมีกลิ่นเหม็นและแย่ แต่มันทำให้งานสำเร็จ

เราใช้มันเป็นประจำทุกวัน


1

ฉันชอบ CI joe เท่านั้นฉันมีปัญหากับส่วนที่เหลือทั้งหมด CI Joe เป็นขั้นต่ำที่แน่นอนในการทำงานให้เสร็จซูเปอร์เปรียวและน่าเชื่อถือ แหล่งฮัดสันนั้นน่ากลัวและ UI ก็ไม่สนใจฉัน


0

ฉันเพิ่งเผยแพร่แอพการรวมต่อเนื่องที่ง่ายมากสำหรับ RubyOnRails + SVN / GIT บางทีคุณควรลองดู:

http://github.com/felipegiotto/Inotegration/tree/master

ฉันใช้แนวคิดของเครื่องมือวัดและทดสอบและหลังจากลองใช้เครื่องมือ CI และไม่ชอบใครเลยฉันตัดสินใจที่จะสร้างของตัวเองโดยไม่จำเป็นต้องสร้างไฟล์ XML ขนาดใหญ่หรือการกำหนดค่าอื่น ๆ เพียงแค่สร้าง Rails ขึ้นมา

หากคุณต้องการโปรดส่งข้อเสนอแนะบางอย่าง ..

ขอแสดงความนับถืออย่างสูง,

เฟลิเป้ Giotto


0

การใช้ CI หลังจากการกระทำทุกครั้งดูเหมือนว่าจะค่อนข้างแพงหากคุณสมัครสมาชิกกับปรัชญา "ยอมรับบ่อย" วิธีการเกี่ยวกับการใช้ cronjob ง่าย ๆ ทุกสองสามชั่วโมงและส่งผลลัพธ์ทางอีเมลไปยังรายชื่อผู้รับจดหมาย dev?


หรือตั้งค่าเซิร์ฟเวอร์ CI ของคุณเป็นแบบสำรวจความคิดเห็นเพื่อการเปลี่ยนแปลงเพียงครั้งเดียวทุกชั่วโมง แอพ CI ส่วนใหญ่รองรับการตั้งค่านี้
jerhinesmith

2
ด้วยคอมไพล์คุณสามารถกระทำได้บ่อยครั้ง แต่ผลักดันไม่ค่อย
Vanuan

0

ฉันเพิ่งกำหนดค่าฮัดสัน / เจนกินส์สำหรับมัน อัญมณี ci_reporter สามารถช่วยจัดรูปแบบเอาต์พุต JUnit สิ่งที่ฮัดสันคาดหวังและฮัดสันมีปลั๊กอินรางดังนั้นฉันสามารถดูการรายงานข่าวของ rcov รายงานการทดสอบสถิติรางรถไฟและอื่น ๆ อีกมากมาย


คุณสามารถเปรียบเทียบการตั้งค่าของคุณกับทางเลือกอื่นได้หรือไม่?
Andrei

ขณะที่ฉันใช้ Rails 2.3.x สำหรับโครงการผลิตของฉันในปัจจุบันไม่ได้เพราะทางเลือกอื่นส่วนใหญ่ต้องการ Rails 3.x อย่างไรก็ตามเมื่อฉันสามารถฉันจะทดสอบและเผยแพร่ประสบการณ์ของฉัน
Gabor Garami

ฉันลอง Jenkins กับ Rails 3.x ด้วยและใช้งานได้ดีมาก ฉันลองใช้วิธีแก้ปัญหาอื่นด้วย (ตัวอย่างเช่น IntegrityApp) แต่เนื่องจากฉันใช้เจนกินส์สำหรับทดสอบโครงการอื่นด้วยเช่นกันมันจึงกลายเป็นทางออกสุดท้ายสำหรับมัน ไม่ได้หมายความว่า IntegrityApp หรือสิ่งอื่น ๆ ไม่ดี IntegrityApp เป็นสิ่งที่ดีมาก แต่ฉันชอบ Jenkins มากกว่านี้
Gabor Garami

0

คุณควรพิจารณาดูที่ CloudMunch ด้วย นี่เป็นแพลตฟอร์มโพลิกล็อตเพื่อให้คุณมีภาษาที่แตกต่างกันซึ่งเป็นส่วนหนึ่งของ codebase ของคุณพร้อมชุดเมทาดาทาการสร้างที่หลากหลาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.