DevOps

ถาม & ตอบสำหรับวิศวกรซอฟต์แวร์ที่ทำงานเกี่ยวกับการทดสอบอัตโนมัติการส่งมอบอย่างต่อเนื่องการรวมบริการและการตรวจสอบและการสร้างโครงสร้างพื้นฐาน SDLC

2
ฉันจะเรียกใช้ ansible บนโฮสต์ได้ครั้งละหนึ่งตัวและทำลายความล้มเหลวได้อย่างไร
ฉันมีเพลย์บุ๊ค Ansible ที่ฉันต้องการอัปเดตอุปกรณ์ที่ไม่สม่ำเสมอตามลำดับ ฉันสามารถใช้งานserial:1ได้ แต่ฉันต้องการหยุด playbook โดยสิ้นเชิงถ้าฉันล้มเหลวดังนั้นฉันจึงสามารถแก้ไขได้ก่อนดำเนินการต่อแทนที่จะสะสมข้อผิดพลาด ฉันต้องการรีสตาร์ท playbook ที่โฮสต์เดียวกับที่ฉันหยุด ปัจจุบันใช้ Ansible v2.0 แต่ยังสามารถเปลี่ยนไปใช้เวอร์ชันที่ใหม่กว่าได้หากคุณลักษณะประเภทนั้นมีให้เฉพาะในเวอร์ชันที่ใหม่กว่าเท่านั้น
15 ansible 

1
ฉันจะรวมใบรับรอง CA ภายในของฉันเพื่อตรวจสอบการแลกเปลี่ยน SSL ใน Chef ได้อย่างไร
เราใช้ผู้ออกใบรับรองภายในเพื่อสร้างใบรับรองเซิร์ฟเวอร์ใน บริษัท ของฉัน นอกจากนี้เรายังต้องจัดการกับพร็อกซีแบบโปร่งใสที่ทำการสกัดกั้น SSL (MITM) ฉันพบข้อผิดพลาดในการตรวจสอบความถูกต้อง SSL เป็นประจำเนื่องจาก Chef ไม่รู้จักใบรับรอง CA และบางครั้งก็เป็นเครื่องมือรอบตัวพ่อครัว (berkshelf, knife, มีดหรือแม้แต่ลูกค้าพ่อครัวเองเมื่อพูดคุยกับเซิร์ฟเวอร์เป็นครั้งแรกเนื่องจาก Chef 12 เปิดใช้งาน SSL) คำถามคือฉันจะทำให้ Chef รับรู้เกี่ยวกับใบรับรอง CA ของฉันเพื่อรับการแลกเปลี่ยน SSL ที่ถูกต้องได้อย่างไร
15 chef  ssl 

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

4
วิธีการเปลี่ยนจากความเป็นจริงของการแตกแขนงที่ซับซ้อนไปเป็นรูปแบบสาขาเดียว?
ในองค์กรขนาดใหญ่การใช้วิธีการน้ำตกมักจะส่งผลให้เกิดโครงสร้างการแตกแขนงที่ซับซ้อนมาก (aka spagetti สาขา ) กลยุทธ์การแยกสาขาใดบ้างที่สามารถใช้ในการเปลี่ยนจากความเป็นจริงของการแตกแขนงที่ซับซ้อนไปเป็นโมเดลสาขาเดียวเช่นการพัฒนาแบบอิงลำตัว? ปรับปรุง: เพื่อชี้แจงคำถามที่เกี่ยวกับการโยกย้าย / การเปลี่ยนแปลงตัวเองไม่เกี่ยวกับวิธีการก่อนและหลังซึ่งค่อนข้างชัดเจน ไม่น่าจะเป็น "ที่ EOB วันนี้เรายังคงเป็นน้ำตกที่มีสาขากว่าพันล้านแห่ง แต่พรุ่งนี้สิ่งแรกที่เราจะเปลี่ยนไปใช้ CI แบบสาขาเดียว"

2
วิธีการสั่งซื้อการสำรองข้อมูลจริงของข้อมูล S3
ฉันต้องการสั่งซื้อสำเนาสำรองข้อมูลจาก S3 ไปยังไดรฟ์ทางกายภาพ (SATA HD) และส่งไปยังที่อยู่ ฉันรู้ว่ามันเป็นไปได้ที่จะใช้Amazon Glacierแต่ฉันไม่สามารถหาตัวเลือกได้ทุกที่ อะไรจะเป็นวิธีที่ง่ายที่สุดในการทำเช่นนั้น?

1
วิธีการบรรลุการเปลี่ยนแปลงอย่างราบรื่นจาก "รูปแบบการจัดเก็บ VCS ขนาดใหญ่สำหรับผลิตภัณฑ์ทั้งหมด" เป็นรูปแบบ "ที่เก็บ VCS ขนาดเล็กจำนวนมาก"
มันเป็นสถานการณ์ทั่วไปที่ codebase ของผลิตภัณฑ์ที่เก็บโดยที่เก็บในระบบ VCS บางระบบจะวิวัฒนาการไปจนถึงจุดที่ codebase นั้นสามารถมองเห็นได้ว่ามีหลายผลิตภัณฑ์ การแยกรหัสฐานข้อมูลออกจากที่เก็บข้อมูล VCS หลายแห่งซึ่งแต่ละแห่งสำหรับผลิตภัณฑ์เดียวสามารถใช้ประโยชน์ได้หลายอย่าง (ดูประโยชน์ของการมีผลิตภัณฑ์ต่อที่เก็บ VCS ผ่านแบบจำลองพื้นที่เก็บข้อมูลด้านล่าง) ในด้านเทคนิคการแยก codebase นั้นเป็นขั้นตอนที่ค่อนข้างง่ายเนื่องจาก VCS ส่วนใหญ่สนับสนุนการดำเนินการนี้ แยก แต่อาจเพิ่มขึ้นปัญหาทางวิศวกรรมที่เกี่ยวข้องกับการทดสอบแบบอัตโนมัติ, การส่งมอบอย่างต่อเนื่องบูรณาการบริการหรือการตรวจสอบ (ดูปัญหาที่เกิดขึ้นโดยแยก.) องค์กรที่วางแผนที่จะดำเนินการแยกดังกล่าวจึงจำเป็นต้องทราบวิธีดำเนินการเปลี่ยนแปลงนี้อย่างราบรื่นที่สุดเท่าที่จะเป็นไปได้นั่นคือโดยไม่รบกวนการส่งมอบและการติดตามตรวจสอบ ขั้นตอนแรกของเรื่องนี้น่าจะเข้าใจแนวคิดของโครงการได้ดีขึ้นและวิธีแยกวิเคราะห์ใน codebase ขนาดใหญ่ ในคำตอบของคำถามนี้ฉันต้องการจะดู: ความพยายามที่จะให้คำจำกัดความการทำงานของผลิตภัณฑ์คืออะไรซึ่งจะให้เกณฑ์ที่ใช้งานได้จริงเพื่อวิเคราะห์ผลิตภัณฑ์ใน codebase ที่มีอยู่ ตามคำจำกัดความการทำงานนี้ทำอย่างละเอียดแผนที่ดำเนินการแยกจริง เราสามารถทำให้ลดความซับซ้อนของสมมติฐานว่า codebase มีการประมวลผลโดยอัตโนมัติSDLCการดำเนินการอย่างต่อเนื่องบูรณาการและต่อเนื่องการจัดส่ง นั่นคือแต่ละสาขาได้รับการตรวจสอบความถูกต้องโดยการทดสอบอัตโนมัติที่นำไปใช้ใน codebase ปัจจุบันและแต่ละการผสานกับสาขา“ เวทมนต์” บางอย่างจะสร้างสิ่งประดิษฐ์ผลิตภัณฑ์ที่ได้รับการทดสอบและปรับใช้ ( สิ่งประดิษฐ์สินค้าเป็นเช่น tarballs แหล่งที่มาของเอกสาร, ซอฟแวร์ไบนารีเทียบท่าภาพ Amis, unikernels.) แผนดังกล่าวเป็นที่น่าพอใจหากจะอธิบายวิธีการหลีกเลี่ยง ปัญหาที่เกิดจากการแยก ขั้นตอนการทดสอบอัตโนมัติเกี่ยวข้องกับที่เก็บเสาหินที่มีอยู่แล้วและที่เก็บแยกอย่างไร ขั้นตอนการปรับใช้อัตโนมัติเกี่ยวข้องกับที่เก็บเสาหินที่มีอยู่แล้วและที่เก็บแยกอย่างไร …

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

4
มีข้อเสียของการใช้แพคเกจ deb ราวกับว่ามันเป็นภาชนะในการปรับใช้โปรแกรมประยุกต์หรือไม่?
ทีมของฉันกำลังพยายามตัดสินใจว่าเราควรปรับใช้แอป Nodejs ของเราเป็นแพ็คเกจ deb แทนที่จะพยายามเรียกใช้ในคอนเทนเนอร์เช่น Docker ฉันได้รับแนวคิดนี้จากการอ่านบล็อกนี้ที่นี่ซึ่งทำให้ข้อโต้แย้งที่ดีสำหรับการใช้แพคเกจ deb สำหรับแอพพลิเคชั่นที่มีอยู่แล้ว ประเด็นหลักจากบล็อกนี้ที่น่าสนใจสำหรับเราคือปัญหาของการรักษาระบบนิเวศของนักเทียบท่า (การแชร์พอร์ต, การอนุญาต, การโฮสต์ของ Docker Images ฯลฯ ) ดูเหมือนว่า "dep-packages เป็นคอนเทนเนอร์ดั้งเดิม" เหมาะสมสำหรับบริการขนาดเล็กที่ไม่ต้องกังวลเกี่ยวกับความขัดแย้งของพอร์ตและการพึ่งพาทั้งหมดได้รับการดูแลภายในสภาพแวดล้อมเสมือน อย่างไรก็ตามลำไส้ของฉันกำลังบอกฉันว่าถ้าแพ็คเกจ deb เหมาะสมดีมันจะเป็นเรื่องธรรมดามากขึ้นและนักโฆษณาจะได้รับการโฆษณาว่าเป็นวิธีแก้ปัญหาภาษาเฉพาะเพิ่มเติม มีข้อเสียของการใช้บางอย่างเช่นแพคเกจ deb เพื่อปรับใช้บริการของเราแทนที่จะใช้ระบบเต็มรูปแบบเช่นนักเทียบท่า?

1
อะไรคือความแตกต่างระหว่างรูปแบบการพัฒนาและการดำเนินงานแบบดั้งเดิมกับวิศวกรรมความน่าเชื่อถือของไซต์
"SRE เป็นสิ่งที่เกิดขึ้นเมื่อคุณขอให้วิศวกรซอฟต์แวร์ออกแบบทีมปฏิบัติการ" - วิศวกรรมความน่าเชื่อถือของไซต์ ตั้งแต่หนังสือวิศวกรรมความน่าเชื่อถือของไซต์ของ Googleเปิดตัวมากกว่าหนึ่งครั้งฉันได้รับแจ้งว่า SRE เป็นส่วนขยายของรูปแบบการดำเนินงานหรือการสนับสนุนแอปพลิเคชันที่มีอยู่ เรามีคำถามสองสามข้อที่กำหนดความแตกต่างระหว่าง Sys ผู้ดูแลระบบวิศวกร DevOps และวิศวกรความน่าเชื่อถือของไซต์: Sysadmin และ DevOps Engineer แตกต่างกันอย่างไร ความแตกต่างระหว่าง SRE และ DevOps คืออะไร คำจำกัดความที่ถูกต้องของ DevOps ในการแนะนำให้รู้จักกับผู้เริ่มต้นคืออะไร แต่ไม่มีของคำถามเหล่านี้หรือคำตอบของพวกเขาอธิบายความแตกต่างระหว่างผู้ดูแลระบบและวิศวกรความน่าเชื่อถือ กล่าวอย่างกว้าง ๆ : อะไรคือความแตกต่างที่สำคัญระหว่างการฝึกปฏิบัติงานวิศวกรรมความน่าเชื่อถือของไซต์กับฟังก์ชั่นการพัฒนาและการดำเนินงานที่แยกจากกันแบบดั้งเดิมภายในธุรกิจ

1
เรียกใช้กระบวนการพื้นหลังในงานไปป์ไลน์
ฉันกำลังมองหาวิธีเรียกใช้กระบวนการ Java ในพื้นหลังโดยใช้ขั้นตอนการประกาศ Jenkins ด้านล่างนี้เป็นตัวอย่างรหัส stage('Deploy'){ steps{ script{ withEnv(['BUILD_ID=dontkill']) { sh "nohup java -jar test-0.0.1-SNAPSHOT.war &" } } } } ทราบอยู่แล้วว่า ProcessTreeKiller ของ Jenkins และทุกคำตอบแนะนำให้ทำเช่นเดียวกัน ฉันได้ลองใช้สภาพแวดล้อมภายในขั้นตอนบล็อกโดยไม่มีโชค เวอร์ชั่นของ Jenkins: 2.60.1 ปลั๊กอินไปป์ไลน์: 1.1.7 ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก

2
ความแตกต่างระหว่าง chroot และ Docker
ฉันไม่เข้าใจความแตกต่างระหว่างนักเทียบท่าและ chroot ใช่มันเป็นเรื่องที่ดีในแง่ของบรรจุภัณฑ์รีจิสทรี แต่อย่างใดฉันได้รับความรู้สึกมัน chroot เพียงกับระฆังและนกหวีดพิเศษ ฉันรู้ว่าฉันขาดอะไรไป มันคงจะดีถ้าได้รู้ว่าพวกมันแตกต่างและต้องการนักเทียบท่าถ้า chroot สามารถทำอะไรที่คล้ายกันได้ ฉันไม่สามารถหาChroot Vs Docker ได้ชัดเจนพอ

5
จะห้ามการเข้าถึง internals ของคอนเทนเนอร์ Docker ได้อย่างไร?
ฉันต้องการส่งมอบแอพของฉันให้กับลูกค้าในรูปของนักเทียบท่ารูปภาพ แต่สิ่งสำคัญคือต้องมั่นใจว่าผู้ใช้ปลายทางจะไม่เปลี่ยนแปลงสิ่งใด ๆ ในภาชนะ ผู้ใช้ควรสามารถเรียกใช้ / หยุดคอนเทนเนอร์และโต้ตอบกับคอนเทนเนอร์ผ่านเครือข่ายเท่านั้น เป็นไปได้หรือไม่ที่จะห้ามการเข้าถึงที่เก็บของภายใน? เป็นไปได้หรือไม่ที่จะตรวจสอบความสมบูรณ์ของภาพที่ทำจากตู้คอนเทนเนอร์?
14 docker  security 

6
นักเทียบท่าเหมาะกับเคสที่ใช้ของฉันหรือไม่
บริษัท ของฉันมีระบบที่เราขายซึ่งประกอบด้วยมินิคอมพิวเตอร์ "Smartbox" ที่ใช้งาน Ubuntu 12.04 กล่องนี้เรียกใช้แอปพลิเคชัน Django รวมถึงกระบวนการพุ่งพรวดที่แตกต่างกันจำนวนหนึ่งที่เกี่ยวข้อง ไม่มาก เรามีกล่องเหล่านี้หลายพันกล่องบนสนาม เราจัดการการขึ้นต่อกันของแพ็คเกจการลงทะเบียนกระบวนการ ฯลฯ ผ่านแพคเกจเดบิตที่มีระดับความสำเร็จที่แตกต่างกัน เราต้องการวิธีที่จะผลักดันการอัปเดตให้กับผู้ใช้ของเราอย่างมีประสิทธิภาพและรวดเร็ว นอกจากนี้เรายังต้องการบางสิ่งบางอย่างเมื่อเราอัพเกรดระบบปฏิบัติการ (เราเกินกำหนดสำหรับการอัพเกรด Ubuntu อย่างที่คุณบอก) เราสามารถรู้สึกปลอดภัยเกี่ยวกับแพ็คเกจของเรา "เพิ่งใช้งานได้" ฉันไม่รู้อะไรเกี่ยวกับนักเทียบท่า แต่เมื่อฉันได้ยินปัญหาของเราเป็นครั้งแรก (ฉันเป็นคนจ้างใหม่) นักเทียบท่าเป็นความคิดแรกของฉัน แต่ยิ่งฉันคิดเกี่ยวกับมันมากขึ้นฉันก็รู้สึกว่ามันอาจจะไม่ใช่เพราะกล่องเหล่านี้เป็นของเราที่เราควบคุมระบบปฏิบัติการซึ่งเป็นส่วนสำคัญของคุณค่าของ Docker หรือฉันเข้าใจ ดังนั้นถ้าเรารู้ว่ากล่องของเราจะเป็น Ubuntu เสมอและโดยพื้นฐานแล้วเรามีแอพ Django บวกกับกระบวนการบางอย่างที่จะเรียกใช้ Docker ดีกว่าแพ็คเกจ deb หรือไม่? TL; DR: นักเทียบท่าเทียบกับแพ็คเกจ deb สำหรับอุปกรณ์แบบกระจายที่มักจะเรียกใช้ Ubuntu ดังนั้นความเป็นอิสระของแพลตฟอร์มจึงไม่สำคัญ
14 docker 

2
การบันทึกการปฏิบัติที่ดีสำหรับงานแบบกระจายคืออะไร
ฉันมีการตั้งค่าต่อไปนี้: สร้างพนักงานหลายคนทำการคำนวณและยุติพวกเขาหลังจากการคำนวณเสร็จสิ้น ดังนั้นทุกครั้งที่มันเป็นอินสแตนซ์ที่แตกต่างกันในการทำงานดังนั้นแต่ละโฮสต์จะมีล็อกไฟล์ของตัวเองซึ่งจะส่งผลให้มีรายการไฟล์จำนวนมาก เป็นการปฏิบัติที่ดีหรือไม่? หากไม่เป็นเช่นนั้นจะมีวิธีใดที่ดีกว่าสำหรับการบันทึกการประมวลผลงานในกรณีใช้งานนี้โดยเฉพาะ PS: โครงสร้างพื้นฐานของฉันไม่มีเซิร์ฟเวอร์ ดังนั้นสำหรับตอนนี้ฉันกำลังเข้าสู่ (AWS) CloudWatch แต่โปรดตอบคำถามอย่างเป็นอิสระจาก AWS และคำร้องขอการตั้งค่าแบบไม่มีเซิร์ฟเวอร์ให้มากที่สุด

3
รับการแก้ไขเพียงครั้งเดียวจาก Git
การมีประวัติการแก้ไขแบบ Git อย่างเต็มรูปแบบมีประโยชน์มากมายซึ่งเป็นส่วนหนึ่งของกระบวนการพัฒนา แต่ผลิตภัณฑ์ของเราคือซอร์สโค้ดเราใช้ภาษาสคริปต์ที่ไม่จำเป็นต้องรวบรวมหรือประมวลผลจากนั้นประวัติ Git จะกลายเป็นภาระในการปรับใช้ - ในตัวอย่างของเราเราปรับใช้สภาพแวดล้อมเสมือนที่สะอาดหลังจากการเปลี่ยนแปลงทุกครั้ง เครื่องเดียว มีบางวิธีในการลดปริมาณของประวัติเช่นโคลนตื้น ๆ ที่มีประสิทธิภาพขึ้นอยู่กับความลึกของการแก้ไขในสาขาทำการดึงข้อมูลแทนการโคลนนิ่ง แต่จากนั้นคุณยังได้รับประวัติจากการแก้ไขและกลับ repo หนึ่งครั้งจากนั้นดึงเมื่อจำเป็น แต่สิ่งนี้สิ้นเปลืองในแง่ของพื้นที่ดิสก์และมีแนวโน้มที่จะเชื่อถือได้น้อยลง มีวิธีรับการแก้ไขเดียวจาก Git โดยที่ไม่มีประวัติหรือไม่?
14 git 

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