Đà Nẵng, một buổi tối mùa hè nóng như đổ lửa, 11h đêm.
Đang lúc cao trào thì tiếng chuông điện thoại réo liên hồi, tiếng ting ting liên tục từ Microsoft team…
“Móa, trời đánh còn tránh bữa…, gì nữa đây?”
Mở điện thoại, liên tục message, email hiện ra
Bên US vừa thông báo, hệ thống DevOps đang bị tê liệt, bên Developer réo liên hồi
Jenkins pipeline báo lỗi “No disk space left”, các job build không chạy được
Artifactory trục trặc rồi, không thể nào down/up artifact để deploy lên server
Ai help xử lý con server cicd18 cái down rồi…
Mấy thanh niên Dev bên US, Europe kêu la ỏm tỏi. Mấy mẹ QA Ấn Độ thì gáo ré như động kinh
Why this issue happens everytime?
What is the problem here?
I need it fixed ASAP
Why Why What? WTF?
Khác timezone, giờ mình chuẩn bị đi ngủ thì mấy thánh ở bển lại đi làm, đành chịu khó xử lý để tránh ảnh hưởng đến schedule deliver thoai, biết làm sao.
Anh nhào tới bàn máy tính, bỏ mặc em út đang tênh hênh trên giường, khóc rấm rứt
Mở board Jira ticket, hoặc loạt ticket blocker xuất hiện
WAR-XXXX– Jenkins pipeline báo lỗi “No disk space left”,
Hệ thống Jenkins này được deploy trên các cluster K8S của GCP, có Jenkins Dev, QA, UAT deploy trên từng cluster. Mỗi Jenkins có 1 Jenkins master, Jenkins agent sẽ được launch khi run job và terminate khi job finished.
Access vào K8S cluster kiểm tra xem nào
gcloud container clusters get-credentials jenkins-dev --zone us-east1-a --project abc
Access vào jenkins master kiểm tra
kubectl exec -it jenkins-master -n jenkins bash
Kiểm tra disk space xem nào
jenkins@jenkins-master:/$ df -h
Filesystem Size Used Avail Use% Mounted on/dev/sdb 6.0T 5.9T xx 99% /var/jenkins_home
Dek, hết dung lượng rồi, jenkins master khi deploy len K8S được mount với GCP volume có dung lượng tận 6T vậy mà giờ đã hết sạch, cái gì đã chiếm nhiều dung lượng đến vậy
Bắt đầu ngồi search GG để tìm hiểu, à đây là cấu trúc thư mục của Jenkins
JENKINS_HOME
+- config.xml (jenkins root configuration)+- *.xml (other site-wide configuration files)+- userContent (files in this directory will be served under your http://server/userContent/)+- fingerprints (stores fingerprint records)+- nodes (slave configurations)+- plugins (stores plugins)+- secrets (secretes needed when migrating credentials to other servers)+- workspace (working directory for the version control system)+- [JOBNAME] (sub directory for each job)+- jobs+- [JOBNAME] (sub directory for each job)+- config.xml (job configuration file)+- latest (symbolic link to the last successful build)+- builds+- [BUILD_ID] (for each build)+- build.xml (build result summary)+- log (log file)+- changelog.xml (change log)
Jenkins jobs khi chạy sau nó sẽ lưu lại artifact của Job Build vào jenkins master, artifact này có thể là binary file, image, text tả pì lù. Hệ thống Jenkins hiện tại đã chạy được 5 năm, hàng chục nghìn jobs.
Sort thử dung lượng xem folder nào chiếm disk space
find -type f -exec du -Sh {} + | sort -rh | head -n 5
À có mấy folder jobs chiếm trăm GB lân, vào Jenkins UI kiểm tra mấy job này xem.
WTF, CLGT, một mớ job keep build từ thời napoleong cởi truồng, bảo sao dung lượng chiếm lớn thế
Check thêm một lúc, số Job keep build khá lớn, không thể xóa bằng cơm được
OK, Jenkins có món Jenkins Script Console
Phải viết nhanh một Jenkins script để discard the old build. Tức là Jenkins job có config để keep 1 số lượng build nhất định. Jenkins script này sẽ discard tất cả những build trước một khoảng thời gian nào đó
OK, search GG + lạch cạch lọc cọc 30 phút sau thì xong cái script, paste vô console run trong 1 nốt nhạc.
Nghỉ chút, phi lên giường, đóng thêm vài phát nữa rồi kiểm tra
Ngon roài , jenkins master đã được dọn sạch còn 30%, hết lỗi
Job build được rồi làng nước ơi
Cảm ơn anh X, I LOVE YOU!!!!
You are my man
Tiếng thanh niên bên France gào ré, nghe chữ LOVE YOU mà thấy đau đít roài
Tiếp theo đến ticket thứ 2
Artifactory warning used more 70%
Uầy, lại dính dáng đến vấn để disk space. Lại nói Jenkins job sau khi thực hiện build sẽ lưu binary lên jfrog artifactory repos thành các version, để khi deploy sẽ lấy binary này deploy lên server

JFrog artifactory được install trên 1 EC2 server, SSH vào server qua bastion host, check dung lượng bằng lệnh df -h
Đúng là đã hết dung lượng, nhưng mà xóa cái gì đây
JFrog server hiện tại có hàng nghìn repos, hàng ngày Jenkins job build và upload vào repos liên tục nào là npm, docker, rpm đủ loại. Diskspace của artifactory lên tới 16T, tính ra chứa được tới mấy nghìn JAV FullHD thế mà cũng phải chịu thua đống binary artifact của mấy anh Dev.
Sau một lúc mày mò, bằng thời gian làm 1 shot thì cũng tìm ra cách
Artifactory có sử dụng 1 clean up script
https://github.com/jfrog/artifactory-scripts/blob/master/Artifactory-Cleanup.sh
Thực chất là sử dùng Jfrog API để thực hiện clean up những repos không sử dụng trong 1 khoảng thời gian. Đại loại là xóa bớt những artifact binary quá cũ đi để dọn dẹp diskspace
OK, thà giết lầm còn hơn bỏ sót, login terminal gõ cmd enter luôn
Ngồi đợi, lâu vãi lúa, quái lạ diskspace không hề giảm. clgt?
curl -u <USER>:<KEY> "<ADR>/artifactory/api/storageinfo"| jq '.fileStoreSummary'
API chạy mãi không thấy gì, access vô system log của artifact , log vẫn print đều đều
parser/package.json, 66260/514440 total 195837054775 bytes
2021-04-26 09:02:32,662 [https-jsse-nio-127.0.0.1-8443-exec-778] [INFO ] (artifactCleanup :138) - Deleting .....
Lạ quá, xóa thì nó đi đâu, vò đầu bứt tai, tiếng message vẫn nhéo liên hồi tự mẹ Ấn Độ
Tôi không push binary lên được, artifactory vẫn không hoạt động
Do it ASAP, I need a call …
Đứng dậy đi lại, ngó vô cái thùng rác chứa đầy BCS
móa bẩn quá phải đi đổ thôi
Bỗng một tia sáng lóe lên, thùng rác
JFrog artifactory sử dụng Trash Can, các file delete được bỏ vào đây trước để có thể restore khi cần. Chức năng tương tự như recycle bin của Windows
Nhanh như 1 cơn gió, kiểm tra Trash Can, đúng mịa rồi, nó bỏ vô đây trước
OK này thì empty trash can
#!/bin/bash
curl -u <USER>:<API_KEY> <ADR>/api/storage/auto-trashcan | jq -r '.children[].uri' > artifacts.txtcat artifacts.txt | while read LINE; doecho $LINEcurl -X DELETE -v -u <USER>API_KEY> <ADR>/api/trash/clean$LINEdone
Script run chứng dập bã trầu, artifactory diskspace trở nên trống hoác như cái hang
WOW, you save my life!!!!
Amading gút chóp!!!
Mẹ Ấn Độ đổi giọng nhanh hơn cả lật bánh tráng.
Anh kĩ sư X thở dài đã 2h sáng, lặng lẽ đặt lưng xuống giường.
Một ngày của kĩ sư DevOps là như vại đấy
5 Nhận xét
Em cứ ngỡ bác làm back end cơ, nhưng hóa ra bác làm Devops
Trả lờiXóalàm checker nhá
Xóahi anh. cho em hỏi nếu dùng jenkins trên k8s thì có build dc cho iOS app ko nhỉ? Vì theo em biết muốn build đc iOS thì phải có image của macOS
Trả lờiXóako rành ios lắm nhưng cần build jenkins agent là macOS
XóaDaily work kiểu này là của mấy ông IT-Ops chứ k phải của DevOps nhá thanh niên.
Trả lờiXóaMonitoring system để đâu mà để HDD đến 99% ?