Rumah > Artikel > pembangunan bahagian belakang > Perjalanan HNG Saya. Peringkat Enam: Memanfaatkan Python untuk Mendedahkan Metrik DORA
Untuk peringkat 6, kami ditugaskan untuk mendedahkan DORA (Penyelidikan DevOps dan, baru-baru ini saya memulakan projek untuk mendedahkan metrik DORA (Penyelidikan dan Penilaian DevOps) menggunakan Python. Pengalaman ini mengajar saya pelajaran berharga tentang amalan DevOps dan selok-belok bekerja dengan API Dalam artikel ini, saya akan membimbing anda melalui proses, menerangkan maksud setiap metrik dan menyerlahkan beberapa perangkap biasa yang perlu diberi perhatian.
Apakah Metrik DORA?
Sebelum kita menyelami kod tersebut, mari kita bincangkan secara ringkas apakah metrik DORA:
Metrik ini membantu pasukan mengukur prestasi penghantaran perisian mereka dan mengenal pasti bidang untuk penambahbaikan.
Bermula
Untuk mula mendedahkan metrik ini, anda memerlukan:
Mula-mula, pasang perpustakaan yang diperlukan:
pip install requests prometheus_client
Struktur Kod
Saya menyusun skrip Python saya sebagai kelas yang dipanggil DORAMetrics. Berikut ialah versi mudah permulaannya:
class DORAMetrics: def __init__(self, github_token, repo_owner, repo_name): self.github_token = github_token self.repo_owner = repo_owner self.repo_name = repo_name self.base_url = f"https://api.github.com/repos/{repo_owner}/{repo_name}" self.headers = { 'Authorization': f'token {github_token}', 'Accept': 'application/vnd.github.v3+json' } # Define Prometheus metrics self.deployment_frequency = Gauge('dora_deployment_frequency', 'Deployment Frequency (per day)') self.lead_time_for_changes = Gauge('dora_lead_time_for_changes', 'Lead Time for Changes (hours)') self.change_failure_rate = Gauge('dora_change_failure_rate', 'Change Failure Rate') self.time_to_restore_service = Gauge('dora_time_to_restore_service', 'Time to Restore Service (hours)')
Persediaan ini membolehkan kami berinteraksi dengan API GitHub dan mencipta metrik Prometheus untuk setiap metrik DORA.
Mengambil Data daripada GitHub
Salah satu aspek yang paling mencabar ialah mendapatkan semula data yang diperlukan daripada GitHub. Begini cara saya mengambil penempatan:
def get_deployments(self, days=30): end_date = datetime.now() start_date = end_date - timedelta(days=days) url = f"{self.base_url}/deployments" params = {'since': start_date.isoformat()} deployments = [] while url: response = requests.get(url, headers=self.headers, params=params) response.raise_for_status() deployments.extend(response.json()) url = response.links.get('next', {}).get('url') params = {} return deployments
Kaedah ini mengendalikan penomboran, memastikan kami mendapat semua penempatan dalam tempoh masa yang ditentukan.
Mengira Metrik DORA
Mari lihat bagaimana saya mengira Kekerapan Penggunaan:
def get_deployment_frequency(self, days=30): deployments = self.get_deployments(days) return len(deployments) / days
Pengiraan mudah ini memberikan kami purata bilangan penempatan setiap hari sepanjang tempoh yang ditentukan.
Masa Utama untuk Perubahan
Mengira Masa Utama untuk Perubahan adalah lebih rumit. Ia memerlukan komit yang mengaitkan dengan penempatan yang sepadan:
def get_lead_time_for_changes(self, days=30): commits = self.get_commits(days) deployments = self.get_deployments(days) lead_times = [] for commit in commits: commit_date = datetime.strptime(commit['commit']['author']['date'], '%Y-%m-%dT%H:%M:%SZ') for deployment in deployments: if deployment['sha'] == commit['sha']: deployment_date = datetime.strptime(deployment['created_at'], '%Y-%m-%dT%H:%M:%SZ') lead_time = (deployment_date - commit_date).total_seconds() / 3600 # in hours lead_times.append(lead_time) break return sum(lead_times) / len(lead_times) if lead_times else 0
Kaedah ini mengira perbezaan masa antara setiap komit dan penggunaan yang sepadan. Adalah penting untuk ambil perhatian bahawa tidak semua komit boleh mengakibatkan penempatan, jadi kami hanya mempertimbangkan yang melakukannya. Keputusan akhir ialah purata masa pendahuluan dalam jam.
Satu cabaran yang saya hadapi di sini ialah memadankan komitmen dengan penempatan. Dalam sesetengah kes, penempatan mungkin termasuk berbilang komit, atau komit mungkin tidak digunakan serta-merta. Saya terpaksa membuat andaian berdasarkan data yang tersedia, yang mungkin memerlukan pelarasan untuk aliran kerja pembangunan yang berbeza.
Tukar Kadar Kegagalan
Menentukan Kadar Kegagalan Perubahan diperlukan untuk menganalisis status setiap penempatan:
def get_change_failure_rate(self, days=30): deployments = self.get_deployments(days) if not deployments: return 0 total_deployments = len(deployments) failed_deployments = 0 for deployment in deployments: status_url = deployment['statuses_url'] status_response = requests.get(status_url, headers=self.headers) status_response.raise_for_status() statuses = status_response.json() if statuses and statuses[0]['state'] != 'success': failed_deployments += 1 return failed_deployments / total_deployments if total_deployments > 0 else 0
Kaedah ini mengira bilangan kerahan yang gagal dan membahagikannya dengan jumlah kerahan. Cabaran di sini ialah mentakrifkan apa yang menjadi penempatan "gagal". Saya menganggap pelaksanaan gagal jika status terbaharunya bukan "berjaya".
Perlu diingat bahawa pendekatan ini mungkin tidak menangkap semua jenis kegagalan, terutamanya yang berlaku selepas penggunaan yang berjaya. Dalam persekitaran pengeluaran, anda mungkin mahu menyepadukan sistem pemantauan atau pengurusan insiden anda untuk pengesanan kegagalan yang lebih tepat.
Mendedahkan Metrik dengan Prometheus
Untuk menjadikan metrik ini tersedia untuk Prometheus mengikis, saya menggunakan perpustakaan prometheus_client:
from prometheus_client import start_http_server, Gauge # In the main execution block start_http_server(8000) # Update metrics every 5 minutes while True: dora.update_metrics() time.sleep(300)
Ini memulakan pelayan pada port 8000 dan mengemas kini metrik setiap 5 minit.
Perangkap Biasa
Semasa projek ini, saya menghadapi beberapa cabaran:
Kesimpulan
Mendedahkan metrik DORA menggunakan Python merupakan pengalaman yang mencerahkan. Ia memperdalam pemahaman saya tentang amalan DevOps dan meningkatkan kemahiran saya dalam bekerja dengan API dan pemprosesan data.
Ingat, metrik ini bertujuan untuk membimbing peningkatan, bukan sebagai kayu untuk mengalahkan pasukan. Gunakannya dengan bijak untuk memupuk budaya peningkatan berterusan dalam proses pembangunan anda.
Terima kasih kerana membaca ❤
Atas ialah kandungan terperinci Perjalanan HNG Saya. Peringkat Enam: Memanfaatkan Python untuk Mendedahkan Metrik DORA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!