DevOps

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

1
วิธีการกำหนดและทำซ้ำกำหนดหมายเลขพอร์ตที่เพิ่มขึ้นใน Ansible ได้อย่างไร
ฉันยังใหม่กับ Ansible แต่ฉันต้องบำรุงรักษา playbooks ซึ่งสอดคล้องกับบริการที่จะติดตั้งในสภาพแวดล้อมที่กำหนด พวกเขาจำเป็นต้องได้รับมอบหมายพอร์ตใบรับรอง ฯลฯ ซึ่งส่งผลให้หลาย ๆ ไฟล์ที่มีรายการของชื่อเดียวกันและการกำหนดให้กับพวกเขา ในหลายกรณีฉันคิดว่าฉันสามารถนำ service_name กลับมาใช้ใหม่ได้อย่างง่ายดายเป็นตัวแปร แต่เมื่อทำการแมปกับ IP พอร์ตหรือตัวระบุตัวเลขอื่น ๆ ฉันยังไม่ได้คิดหาวิธีกำหนดหมายเลขที่แตกต่างกันในลักษณะที่สามารถทำซ้ำได้ เหมือนกันแม้ว่าจะมีการเพิ่มบริการใหม่ ฉันได้พิจารณาการใช้ฐานข้อมูล SQLite เพื่อจัดเก็บบริการจากและเพื่อสร้างค่าจากรหัสของพวกเขา แต่ฉันไม่มีความคิดว่าจะรวมเข้ากับ Ansible ได้อย่างไร ฉันสมมติว่าการกำหนดหมายเลขพอร์ตที่เพิ่มขึ้นไม่ใช่สิ่งใหม่ทั้งหมด มันเป็นสิ่งที่ sysadmins มากมายในแต่ละวันดังนั้นจะต้องมีวิธีที่จะทำอย่างนั้น แก้ไข : เราเพิ่มหมายเลขพอร์ตโดยตรงในgroup_vars/all.ymlลักษณะนี้: ports: service1:1024 service2:1025 service3:1026 สินค้าคงคลังจะถูกสร้างขึ้นโดยอัตโนมัติเนื่องจากเราสร้างคุกเพิ่มเติม (BSD) และขึ้นอยู่กับบทบาทที่จะดำเนินการ
12 ansible  ports 

3
มีวิธีเรียกใช้ with_items วนซ้ำใน Ansible หรือไม่
ฉันใช้ Ansible 2.2 แต่สามารถอัพเกรดได้ถ้ามันช่วยได้ ฉันเห็นสิ่งนี้และรู้สึกตื่นเต้นมาก แต่ดูเหมือนจะไม่ได้อยู่ในเอกสาร Ansible รุ่น (หรือใด ๆ ) ปัญหาที่ฉันพยายามแก้ไขคือฉันมีผู้ใช้ 1,000 คนที่ฉันต้องจัดการในกล่อง Centos ใช้เวลาสักครู่ในการเรียกใช้งานนี้ตามลำดับ และยิ่งน่ารำคาญยิ่งขึ้นทุกสิ่งปรากฏขึ้นเมื่อมีการเปลี่ยนแปลงเนื่องจากคำสั่ง "หมดอายุ" ในโมดูลผู้ใช้จะทำเครื่องหมายสิ่งที่เปลี่ยนแปลงเสมอ สิ่งนี้ดูมีแนวโน้มด้วยเช่นกัน แต่ใช้เวลาเท่ากันในการรันแต่ละคำสั่งในลูป with_items และไม่ได้ทำงานเร็วขึ้น (ฉันไม่เคยใส่ใจที่จะรอนานจนจบ) การข้ามงานเร็วมาก (เร็วกว่าใน Ansible 2.0) ถ้าฉันไม่สามารถหาวิธีที่จะทำให้การทำงานแบบขนานนี้ฉันคิดว่าฉันจะย้อนกลับไปและหาวิธีที่จะข้ามงานที่ไม่มีจุดหมายและถ้าทั้งหมด อื่นล้มเหลวฉันจะเขียนโมดูลของตัวเอง แต่ดูเหมือนว่าฉันควรจะทำสิ่งนี้ได้เร็วขึ้นใน Ansible นี่คือสิ่งที่ฉันต้องการเรียกใช้ในแบบขนาน host_authorizationsคือรายการชื่อผู้ใช้และข้อมูลอื่น ๆ - name: Create/modify OS user accounts user: name={{ item.username }} group=sshusers shell=/bin/bash home="/home/selinux-modules/{{ item.username }}" …
12 ansible 

2
เป็นไปได้หรือไม่ที่จะสร้างภาพนักเทียบท่าโดยใช้ตัวเรียงต่อพร้อมกัน?
เมื่อหนึ่งทำงานdocker-compose up --buildแล้วภาพนักเทียบท่าจะถูกสร้างขึ้นตามลำดับ เป็นไปได้หรือไม่ที่จะสร้างภาพเหล่านี้ไปพร้อม ๆ กันโดยใช้ตัวสร้างนักเทียบท่า? มีหลายปัญหารวมถึงสิ่งนี้แต่ก็ไม่ชัดเจนว่าเป็นไปได้หรือไม่

4
เปิดพอร์ตบน Google Cloud Load Balancer
ดูเหมือนว่าตามค่าเริ่มต้นตัวโหลดบาลานซ์ของ Google Cloud จะเปิดเผยพอร์ตจำนวนหนึ่งโดยไม่จำเป็น ฉันไม่พบวิธีที่จะเปิดเผยเพียง 80/443 และทุกครั้งที่ฉันทำหนึ่งใน balancer โหลดของพวกเขาพอร์ตต่อไปนี้จะเห็นใน nmap: PORT STATE SERVICE 25/tcp open smtp 80/tcp open http 110/tcp open pop3 143/tcp open imap 443/tcp open https 465/tcp open smtps 587/tcp open submission 993/tcp open imaps 995/tcp open pop3s 1720/tcp open H.323/Q.931 8080/tcp open http-proxy มีวิธีบล็อก 25, 465, 587, …

2
การใช้ sudo จากเจนกินส์นั้นแย่หรือไม่?
ฉันใช้ปลั๊กอินเผยแพร่ผ่าน SSHเพื่อปรับใช้แอพของฉันจากJenkinsสภาพแวดล้อมที่แตกต่างกัน งานปรับใช้บางอย่างทำหน้าที่เตรียมสภาพแวดล้อมและสิ่งต่าง ๆ เช่นหยุดและเริ่มบริการระบบเซิร์ฟเวอร์ของแอพใหม่ sudoบางส่วนของคำสั่งดังกล่าวจำเป็นต้องมี ฉันแค่อยากรู้ว่ามันอาจเป็นวิธีปฏิบัติด้านความปลอดภัยที่ไม่ดีหรือไม่ที่ต้องใช้ sudo ในการเผยแพร่ทางไกล เราควรเปลี่ยนนโยบายความปลอดภัยของโฮสต์เป้าหมายเพื่อให้สามารถใช้ฟังก์ชั่นที่ต้องการโดยไม่ต้อง sudo ได้หรือไม่?
11 jenkins  security 

3
Jenkins: ปัญหาการอนุญาตให้ใช้ Docker เป็นสภาพแวดล้อมการสร้าง
ฉันติดตั้ง Jenkins บนเครื่อง Ubuntu 16.04 เจนกินส์ตัวเองไม่ได้ทำงานในภาชนะ สิ่งที่ฉันต้องการจะทำก็แค่โทรหาyarn installโดยใช้อิมเมจโหนด ดังนั้นนี่คือ Jenkinsfile ของฉัน: pipeline { agent any stages { stage('install node modules...') { agent { docker 'node' } steps { sh 'cd /path/to/package.json; yarn install' } } } } ตรงไปตรงมาสวยใช่มั้ย เจนกินส์ผู้ใช้ / กลุ่ม112:116และ uid ของภาชนะโหนดคือ1000เพราะฉะนั้นกระบวนการเส้นด้าย (ซึ่งทำงานเป็นผู้ใช้โหนด 1000) mkdir /.configไม่สามารถทำในสิ่งที่ตนชอบ ฉันพยายามหมุนโหนดคอนเทนเนอร์ที่ผ่านการโต้เถียง-u 1000มันชนกับปัญหาสิทธิ์เมื่อพยายามสร้างไดเรกทอรีที่ทนทาน ดูเหมือนว่าเป็นปัญหาประเภทหนึ่งหรือประเภทอื่นฉันจะแก้ไขได้อย่างไร …

4
โครงสร้างพื้นฐานเป็นรหัสและ TDD
โครงสร้างพื้นฐานเป็นรหัสบอกให้เราใช้เครื่องมือที่ทำให้งานสร้างของคุณเป็นแบบอัตโนมัติ ยิ่งใหญ่ เครื่องมืออย่างansible , พ่อครัว , หุ่นเชิด , กองเกลือและอื่น ๆ ผลักดันเราให้เขียนว่าโครงสร้างพื้นฐานมีลักษณะอย่างไรในขณะที่แก้ไขความแตกต่าง ใน Salt กองบิตเหล่านี้จะเรียกว่ารัฐ หากรัฐไม่ตรงกับความจริงเครื่องมือจะแก้ไขให้เรา กล่าวอีกนัยหนึ่ง - เรากำลังเขียนการทดสอบสำหรับโครงสร้างพื้นฐานของเราและหากการทดสอบล้มเหลวเครื่องมือจะแก้ไขด้วยตนเอง อย่างน้อยนั่นก็เป็นความคิด XP สอนให้เราใช้ TDD และคำถามคือถ้ามันใช้กับโครงสร้างพื้นฐานได้หรือไม่ การขับรถแสดงให้เห็นว่ามันเป็น ฉันนึกภาพการทดสอบบางประเภทที่มีประโยชน์มาก เราเขียนการทดสอบควันที่มาพร้อมกับบริการที่ปรับใช้เพื่อให้แน่ใจว่าบริการที่ปรับใช้แบบ end-to-end จะทำงานและทำงานตามที่คาดไว้ นี่จะเป็นการเรียก API หรือ / และ systemctl ตรวจสอบเพื่อให้แน่ใจว่าสิ่งที่เราเพิ่งปรับใช้งาน ฟังก์ชั่นจำนวนมากนี้สามารถครอบคลุมในสถานะเดียวกันเนื่องจากเครื่องมือเช่น ansible มีสถานะเพื่อให้แน่ใจว่าบริการกำลังทำงานอยู่ มีโครงการโมเลกุลที่อนุญาตให้เรียกใช้แต่ละบทบาท (ตามที่เรียกว่าสถานะของมัน) เทียบกับนักเทียบท่าหรือเครื่องมือ virtualisation ชั่วคราวอื่น กองกำลังนี้จะแยกบทบาทและอนุญาตให้ดำเนินการแยกจาก playbook ขณะที่ทำงานกับพวกเขา การทดสอบส่วนใหญ่อนุญาตการเยาะเย้ยตัวแปรที่บทบาทควรจะทำงานด้วย ตัวอย่างอื่น ๆ ดูเหมือนจะซ้ำซ้อนของเอ็นจิน …

1
งานไปป์ไลน์ของเจนกินส์; การอ้างอิงที่เหมาะสมสำหรับขั้นตอน slackSend
นี่อาจเป็นข้อผิดพลาดของผู้ใช้ 100% แต่ฉันไม่สามารถรับงานไปป์ไลน์เพื่อใช้ตัวแปรเป็นชื่อช่องในขั้นตอน slackSend นี้ใช้ทั้งปลั๊กอินหย่อนและรูปร่างของผู้ใช้ Vars ปลั๊กอิน ฉันกำลังพยายามที่จะใช้BUILD_USER_FIRST_NAMEเพื่อระบุช่องทางที่จะหย่อนกลับไปที่ (เช่นคนที่เริ่มต้นการสร้างควรเป็นคนที่จะได้รับข้อความ) มีครึ่งหนึ่งของบทความนี้เกี่ยวกับวิธีใช้ปลั๊กอินผู้ใช้บิลด์ในงานไปป์ไลน์ แต่การแทนที่ตัวแปรกำลังทำให้ฉันสะดุด ส่วนที่เกี่ยวข้องของงานจะเป็นดังนี้ stage ('message') { wrap([$class: 'BuildUser']) { sh "printf '%s' ${BUILD_USER_FIRST_NAME} > name.txt" } archiveArtifacts artifacts: 'name.txt' name = readFile('name.txt') echo "name is $name" //works fine, I get Alex if ( "$output" != null ) { slackSend (channel: '@$name', …

2
ฉันสามารถเปลี่ยนชื่ออินสแตนซ์ RDS ได้หรือไม่
ฉันได้รับการถ่ายทอดคอลเลกชันของอินสแตนซ์ RDS MySQL ด้วยการสุ่ม (ไม่มีประโยชน์) DB อินสแตนซ์ชื่อ ฉันมักจะต้องขุดลงในส่วนแท็กเพื่อหาว่าพวกเขาอยู่ในโครงการใด หนึ่งในการตั้งค่าที่ผมสามารถปรับเปลี่ยนใน RDS DB Instance Identifierเป็น หากฉันเปลี่ยนสิ่งนี้จะเกิดอะไรขึ้นนอกเหนือจากการเปลี่ยนชื่อ มันจะส่งผลกระทบต่อรหัสของใครหรือไม่ หรือเป็นการเปลี่ยนแปลงที่ไม่เป็นอันตรายหรือไม่? เหล่านี้เป็นระบบถ่ายทอดสดที่ฉันไม่สามารถจ่ายได้
11 amazon-rds 

3
ฉันจะกำหนดค่าคีย์ SSH ในการตั้งค่าหลายเครื่องของ Vagrant ได้อย่างไร
ฉันมี 4 VMs ใน Vagrantfile ของฉัน - 3 เซิร์ฟเวอร์แอปพลิเคชันและโฮสต์การควบคุม Ansible ฉันใช้ Vagrant เพื่อสร้าง VM เท่านั้นเมื่อฉันจัดเตรียมด้วยตนเองจากโฮสต์การควบคุมที่ไม่สามารถควบคุมได้เนื่องจากฉันยังคงสร้าง / แก้ไขสคริปต์ที่ใช้งานได้ ฉันสามารถทำได้vagrant ssh ansibleและvagrant ssh app1/2/3อื่น ๆ แต่เมื่อฉันพยายามที่จะทำansible-playbook oracle.ymlจากโฮสต์การควบคุม Ansible SSH ล้มเหลวด้วย fatal: [192.168.60.10]: UNREACHABLE! => {"changed": false, "msg": "SSH encountered an unknown error during the connection. We recommend you re-run the command using …
11 ansible  vagrant 

7
ทำไมนักพัฒนาจึงควรใส่ใจนักเทียบท่า?
โดยทั่วไปนักพัฒนาจะใส่ใจกับความต้องการทางธุรกิจที่พึงพอใจ เขา / เธออาจมีความเชี่ยวชาญในสแต็คเฉพาะหรือกรอบ แต่เขา / เธอควรใช้ความพยายามในการเรียนรู้นักเทียบท่าและเป็นวิธีการปรับใช้ที่หลากหลาย (Swarm, Kube, Mesos, ฯลฯ )? ทำไมนักพัฒนาถึงใส่ใจนักเทียบท่า? PS: คำถามหลักของโพสต์นี้คือความหมายของการแนะนำนักเทียบท่ากับทีมพัฒนา

2
การตั้งค่าการอนุญาตที่ถูกต้องเมื่อเรียกใช้ Docker ใน Jenkins Pipeline คืออะไร
ฉันพยายามดึงเจนกินส์ไปป์ไลน์ใหม่ด้วยกันเพื่อทดสอบคำขอดึงใหม่ไปยังโค้ดของเรา ฉันใช้นักเทียบท่าพร้อมกับubuntu:14.04ภาพเพื่อจำลองสภาพแวดล้อมการผลิตของเรา นี่คือตัวอย่างการทำงานขั้นต่ำ: #jenkinsfile stage('Checkout and provision'){ docker.image('ubuntu:14.04').withRun('-u root'){ checkout scm sh 'chmod -R 770 ./' sh './init-script.sh' } } และ #init-script.sh sudo add-apt-repository ppa:ondrej/php sudo apt-get update -y sudo apt-get dist-upgrade -y sudo apt-get install \ apache2 \ php \ php-mysql \ php-xml \ libapache2-mod-auth-mysql \ libapache2-mod-php \ php5-curl …
11 jenkins  docker 

1
วิธีการตั้งค่าการแจ้งเตือน AWS Trusted Advisor สำหรับคำเตือน Service Limit?
สิ่งที่ฉันต้องการในชีวิตคือการที่ AWS ยิงอีเมลให้ฉันเมื่อใดก็ตามที่ข้อ จำกัด การบริการของที่ปรึกษาที่เชื่อถือได้ไปที่สถานะ WARN หรือ ERROR ฉันตรวจสอบคำแนะนำลองใช้การแชทด้วยการสนับสนุนและไม่มีใครสามารถทำสิ่งนั้นได้ดังนั้นฉันจึงยื่นมือออกไปที่นี่ ใช้ Case เราหมุนอินสแตนซ์ของ EC2 จำนวนมากและกองซ้อน CloudFormation และทุกอย่างใช้ทรัพยากรจำนวนมาก อย่างใดก็ตามเรามักจะถึงขีด จำกัด ที่เราไม่ทราบในช่วงกลางของการตรวจสอบและจบลงด้วยการถูกบล็อกเป็นเวลาหนึ่งชั่วโมงในขณะที่ AWS ใช้เวลาหวานของพวกเขากระแทกขีด จำกัด ของเรา ฉันต้องการตั้งค่ากิจกรรมบางอย่างเพื่อส่งอีเมลไปที่devops เมื่อหนึ่งใน Service Limits ใกล้จะถึงแล้ว ฉันไม่เป็นไรเพราะตรวจสอบไม่บ่อยเหมือนสัปดาห์ละครั้ง แต่อยากได้วันละครั้งถ้าเป็นไปได้ ความพยายามในการ ฉันลองตั้งค่าเหตุการณ์ CloudWatch แต่ตัวเลือกเดียวที่ฉันทำได้คือส่งอีเมลถึงเราเมื่อ Service Limits ถูกรีเฟรช - ซึ่งไม่มีประโยชน์เพราะคุณอยู่ในนั้นแล้วมองไปที่มันด้วยตนเองและไม่มีจุดใดในอีเมล ตัวเลือก ฝ่ายสนับสนุนบอกว่าไม่มีฟังก์ชั่นเริ่มต้นสำหรับ AWS นี้ดังนั้นฉันกำลังมองหาตัวเลือกเหตุการณ์ที่กำหนดเองหรือฉันจะยอมรับบางสิ่งที่ใช้ประโยชน์จาก Jenkins2 และ AWS CLI หากเป็นเส้นทางที่เป็นไปได้ หากเจนกินส์เป็นวิธีที่จะไปไม่จำเป็นต้องส่งอีเมล - …

3
อะไรคือแนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ Ansible Vault บนที่เก็บข้อมูลสาธารณะและ CI ของแหล่งควบคุมเช่น BitBucket?
บทนำ บน CI ส่วนตัวและที่เก็บข้อมูลการควบคุมแหล่งเช่น Gitlab-ce คุณสามารถคัดลอก ~ / .vault_pass.txt ไปยังเซิร์ฟเวอร์และปล่อยให้ CI ใช้ถอดรหัสไฟล์โดยใช้ Ansible ปัญหา ในที่สาธารณะ CI และแหล่งที่มาการควบคุมแหล่งที่มาเช่น Bitbucket ไม่สามารถคัดลอก ~ / .vault_pass.txt ไปยังเซิร์ฟเวอร์ CI ได้ด้วยตนเอง อภิปรายผล ใน Bitbucket เป็นไปได้ที่จะกำหนดตัวแปรที่เข้ารหัส แต่เมื่อไฟล์นี้ถูกตรวจสอบตัวแปรที่เกี่ยวข้องกับ VAULT เท่านั้น: ANSIBLE_ASK_VAULT_PASS ANSIBLE_VAULT_PASSWORD_FILE ตัวแปรเหล่านี้ไม่ใช่ตัวเลือกในการแก้ไขปัญหาเมื่อANSIBLE_ASK_VAULT_PASSตั้งค่าansible-vaultพร้อมท์: user@host $ Vault password: เมื่อป้อนรหัสผ่านเดียวกันก็สามารถเปิดไฟล์ที่เข้ารหัสได้ แต่เป้าหมายคือการเปิดไฟล์โดยไม่จำเป็นต้องใช้ไฟล์หรือป้อนรหัสผ่านในพร้อมต์ ความพยายามในการแก้ไขปัญหาอื่นกำลังทำงานอยู่export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>แต่โหมดโต้ตอบยังคงมีอยู่ อีกตัวเลือกหนึ่งคือexport ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txtแต่ต้องส่งไฟล์นี้ไปยังที่เก็บ แต่ที่เก็บควบคุมแหล่งที่มาไม่ควรมีรหัสผ่าน

2
เครื่องมือสำหรับการจัดเก็บตามการกำหนดค่าสภาพแวดล้อม
ฉันมีความต้องการในการจัดเก็บข้อมูลการกำหนดค่าตามสภาพแวดล้อมพื้นฐานในเครื่องมือ นี่คือเครื่องมือที่มี GUI สำหรับการเพิ่ม / อัปเดตค่าการกำหนดค่า (เช่นสตริงการเชื่อมต่อ) สิ่งนี้ควรมีค่าเริ่มต้นและสามารถเปลี่ยนแปลงได้ตามสภาพแวดล้อมที่แตกต่างกัน ควรมี API เพื่อดึงค่าการกำหนดค่าเหล่านี้ระหว่างการปรับใช้กับสภาพแวดล้อมเฉพาะเพื่อเพิ่มไปยังแอปพลิเคชัน ฉันค้นหามาระยะหนึ่งแล้วและไม่เห็นเครื่องมือใด ๆ ที่เหมาะกับรายการนี้ มีข้อเสนอแนะหรือไม่? หมายเหตุ : ปัจจุบันการตั้งค่าอยู่ในตัวแปร TeamCity และการปรับใช้นั้นใช้สคริปต์ PowerShell

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