ನಿಮ್ಮ ಏಜೆಂಟ್ ಪ್ರೊಡಕ್ಷನ್ ಅನ್ನು ಹಾಳು ಮಾಡಿಲ್ಲ. ನಿಮ್ಮ ಪೈಪ್‌ಲೈನ್ ಮಾಡಿದೆ.

ನಿಮ್ಮ ಏಜೆಂಟ್ ಪ್ರೊಡಕ್ಷನ್ ಅನ್ನು ಹಾಳು ಮಾಡಿಲ್ಲ. ನಿಮ್ಮ ಪೈಪ್‌ಲೈನ್ ಮಾಡಿದೆ.

ಅನೇಕ ತಂಡಗಳು pull requests ತೆರೆಯಲು ಏಜೆಂಟ್‌ಗಳನ್ನು ಬಳಸುತ್ತವೆ. ಲಿಂಟಿಂಗ್, ಪರೀಕ್ಷೆಗಳು ಮತ್ತು ಬಿಲ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಅವು CI ಅನ್ನು ಬಳಸುತ್ತವೆ. ನಂತರ, ಒಂದು ಶೆಡ್ಯೂಲ್ ಮಾಡಲಾದ ಕೆಲಸವು (scheduled job) ಕೋಡ್ ಅನ್ನು ಸ್ಟೇಜಿಂಗ್‌ನಿಂದ ಪ್ರೊಡಕ್ಷನ್‌ಗೆ ವರ್ಗಾಯಿಸುತ್ತದೆ. ಈ ವ್ಯವಸ್ಥೆಯು ಅಂತಿಮವಾಗಿ ವಿಫಲವಾಗುತ್ತದೆ.

ಸಮಸ್ಯೆ ದುರುದ್ದೇಶಪೂರಿತ ಏಜೆಂಟ್ ಅಲ್ಲ. ಸಮಸ್ಯೆ ಕೆಟ್ಟ ಪ್ರಕ್ರಿಯೆ. ನೀವು ಎರಡು ವಿಭಿನ್ನ ಪ್ರಶ್ನೆಗಳನ್ನು ಒಂದೇ ಗೇಟ್‌ನಲ್ಲಿ ಕುಗ್ಗಿಸಿದ್ದೀರಿ:

  • ಇದು CI ಅನ್ನು ಪಾಸಾಗಿದೆಯೇ?
  • ಇದನ್ನು ಈಗ ಮನುಷ್ಯರು ನೋಡುವುದಕ್ಕೆ ಸುರಕ್ಷಿತವಾಗಿದೆಯೇ?

ಇವೆರಡೂ ಒಂದೇ ವಿಷಯಗಳಲ್ಲ. ಕೋಡ್ ಕೆಲಸ ಮಾಡುತ್ತದೆಯೇ ಎಂದು CI ಪರಿಶೀಲಿಸುತ್ತದೆ. ಆದರೆ ಒಂದು ಫೀಚರ್ ಗ್ರಾಹಕರಿಗೆ ಸಿದ್ಧವಿದೆಯೇ ಎಂದು ಅದು ಪರಿಶೀಲಿಸುವುದಿಲ್ಲ.

ನಿಮ್ಮ ಪೈಪ್‌ಲೈನ್ "merged" ಮತ್ತು "live" ಎರಡನ್ನೂ ಒಂದೇ ಎಂದು ಪರಿಗಣಿಸಿದರೆ, ನಿಮಗೆ ಸಮಸ್ಯೆ ಇದೆ ಎಂದರ್ಥ. ನೀವು ನಿರ್ಧರಿಸದೆಯೇ ಕಂಟಿನ್ಯೂಯಸ್ ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ ಅನ್ನು ಅಳವಡಿಸಿಕೊಂಡಿದ್ದೀರಿ.

ನೀವು ಈ ಎರಡು ಘಟನೆಗಳನ್ನು ಬೇರ್ಪಡಿಸಬೇಕು.

ಇದನ್ನು ಮಾಡಲು ನೀವು ಫೀಚರ್ ಫ್ಲಾಗ್‌ಗಳನ್ನು (feature flags) ಬಳಸಬಹುದು. ಫೀಚರ್ ಫ್ಲಾಗ್‌ಗಳು ಕೇವಲ ಒಂದು ಬೂಲಿಯನ್ ಮತ್ತು ಒಂದು if ಸ್ಟೇಟ್‌ಮೆಂಟ್ ಆಗಿರುತ್ತವೆ. ಪ್ರಾರಂಭಿಸಲು ನಿಮಗೆ ದುಬಾರಿ ಉಪಕರಣಗಳ ಅಗತ್ಯವಿಲ್ಲ. ಒಂದು ಸರಳ ಕಾನ್ಫಿಗರೇಶನ್ ವ್ಯಾಲ್ಯೂ ಅಥವಾ ಎನ್ವಿರಾನ್‌ಮೆಂಟ್ ವೇರಿಯೇಬಲ್ ಸಾಕು.

ನನ್ನ ಸೆಟಪ್ ಈ ನಿಯಮಗಳನ್ನು ಅನುಸರಿಸುತ್ತದೆ:

  • PRಗಳು main ಗೆ ಮರ್ಜ್ ಆಗುತ್ತವೆ, ಆದರೆ main ಯಾವಾಗಲೂ ಲೈವ್ ಆಗಿರುವುದಿಲ್ಲ.
  • ಪ್ರತ್ಯೇಕ ರಿಲೀಸ್ ಹಂತವು main ಅನ್ನು ಪ್ರೊಡಕ್ಷನ್ ಬ್ರಾಂಚ್‌ಗೆ ಏರಿಸುತ್ತದೆ.
  • ನಾನು ಸ್ಪಷ್ಟವಾಗಿ 'go' ಎಂದು ಹೇಳಬೇಕು. ಯಾವುದೇ ಕ್ರೋನ್ ಜಾಬ್‌ಗಳು ಅಥವಾ ಟೈಮರ್‌ಗಳಿಲ್ಲ.
  • ಬಿಲ್ಡ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ನಿರ್ವಹಿಸುವವರೆಗೆ ರಿಲೀಸ್ ಕಾಯುತ್ತದೆ.
  • ಸೈಟ್ ಕೆಲಸ ಮಾಡುತ್ತಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಒಂದು ಆಟೋಮೇಟೆಡ್ ಚೆಕ್ ಪ್ರಮುಖ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ.
  • ಮನುಷ್ಯನು ಬದಲಾವಣೆಗಳ ಮೇಲೆ ಅಂತಿಮ ಮ್ಯಾನುಯಲ್ ಚೆಕ್ ಮಾಡುತ್ತಾನೆ.

ಇದು ಒಂದು ಗೇಟ್ ಅನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ಬಳಕೆದಾರರು ಏನನ್ನೂ ನೋಡುವ ಮೊದಲು ಮನುಷ್ಯ, ಯಂತ್ರ ಮತ್ತು ಮತ್ತೊಬ್ಬ ಮನುಷ್ಯ - ಇವರೆಲ್ಲರಿಗೂ 'ಇಲ್ಲ' ಎಂದು ಹೇಳಲು ಅವಕಾಶ ಸಿಗುತ್ತದೆ.

ಒಂದು ವೇಳೆ ಬಗ್ ಬಳಕೆದಾರರನ್ನು ತಲುಪಿದರೆ, ನೀವು ಅದನ್ನು ವೇಗವಾಗಿ ರಿವರ್ಟ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ. ಇದನ್ನು ಮಾಡಲು, ಡೇಟಾಬೇಸ್ ಮೈಗ್ರೇಷನ್‌ಗಳಿಗಾಗಿ expand and contract ಮಾದರಿಯನ್ನು ಅನುಸರಿಸಿ.

  • ಹೊಸ ಕಾಲಂ ಅನ್ನು nullable ಆಗಿ ಸೇರಿಸಿ.
  • ಡೇಟಾವನ್ನು backfill ಮಾಡಿ.
  • ಹಳೆಯ ಮತ್ತು ಹೊಸ ಕಾಲಂ ಎರಡಕ್ಕೂ ಬರೆಯಿರಿ.
  • ಹೊಸ ಕಾಲಂನಿಂದ ಓದಿ.
  • ನಂತರದ ರಿಲೀಸ್‌ನಲ್ಲಿ ಮಾತ್ರ ಹಳೆಯ ಕಾಲಂ ಅನ್ನು ತೆಗೆದುಹಾಕಿ.

ನೀವು ಇದನ್ನು ಬಿಟ್ಟುಬಿಟ್ಟರೆ, ನಿಮ್ಮ ರಿವರ್ಟ್ ಬಟನ್ ಪ್ರಯೋಜನವಿಲ್ಲದಂತಾಗುತ್ತದೆ. ಮೈಗ್ರೇಷನ್ ಹಳೆಯ ಕೋಡ್‌ಗೆ ಬೇಕಾದ ಕಾಲಂ ಅನ್ನು ತೆಗೆದುಹಾಕಿದರೆ, ನೀವು ರೋಲ್‌ಬ್ಯಾಕ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ನೀವು ಕೇವಲ ಸಮಸ್ಯೆಯಲ್ಲೇ ಉಳಿಯುತ್ತೀರಿ.

ಏಜೆಂಟ್ ಇಂತಹ ತಪ್ಪುಗಳನ್ನು ವೇಗವಾಗಿ ಮಾಡುತ್ತದೆ. ನಿಮ್ಮ ಕೆಟ್ಟ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ಮರೆಮಾಚುತ್ತಿದ್ದ ಮ್ಯಾನುಯಲ್ ಘರ್ಷಣೆಯನ್ನು ಇದು ತೆಗೆದುಹಾಕುತ್ತದೆ. ನೀವು ಬಿಟ್ಟುಬಿಟ್ಟ ಶಿಸ್ತು ಎಂದಿಗೂ ಐಚ್ಛಿಕವಾಗಿರಲಿಲ್ಲ. ಶುಕ್ರವಾರ ಸಂಜೆ 5:00 ಗಂಟೆಯ ಮೊದಲು ಮನುಷ್ಯನೊಬ್ಬ ತಪ್ಪುವನ್ನು ಗಮನಿಸುವುದರಿಂದ ಅದು ಕೇವಲ ಮುಚ್ಚಿಹೋಗಿತ್ತು ಅಷ್ಟೆ.

ಲೂಪ್‌ನಿಂದ ಮನುಷ್ಯನನ್ನು ಹೊರಗಿಟ್ಟರೆ, ಆ ಶಿಸ್ತು ಕಡ್ಡಾಯವಾಗುತ್ತದೆ.

ಮೂಲ: https://dev.to/mattstratton/your-agent-didnt-break-prod-your-pipeline-did-4g9o