เจนเฉ เจนเจฌเจฐ!
เจเจงเฉเจจเจฟเจ เจนเจเฉเจเจค เจตเจฟเฉฑเจ, เจตเจฟเจเจพเจธ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจตเจฟเฉฑเจ เจเฉฐเจเฉเจจเจฐเจพเจเจเจผเฉเจธเจผเจจ เจฆเฉ เจตเจง เจฐเจนเฉ เจญเฉเจฎเจฟเจเจพ เจฆเฉ เจเจพเจฐเจจ, เจเฉฐเจเฉเจจเจฐเจพเจ เจจเจพเจฒ เจเฉเฉเฉ เจตเฉฑเจ-เจตเฉฑเจ เจชเฉเจพเจตเจพเจ เจ เจคเฉ เจธเฉฐเจธเจฅเจพเจตเจพเจ เจฆเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจจเฉเฉฐ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเจฃ เจฆเจพ เจฎเฉเฉฑเจฆเจพ เจเฉฑเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจฎเฉเฉฑเจฆเจพ เจจเจนเฉเจ เจนเฉเฅค เจฆเจธเจคเฉ เจเจพเจเจเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจจเจพ เจธเจฎเฉเจ เจฆเฉ เจเจชเจค เจนเฉ, เจเจธเจฒเจ เจเจธ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจธเจตเฉเจเจฒเจฟเจค เจเจฐเจจ เจฒเจ เจเฉฑเจเฉ-เจเฉฑเจ เจธเจผเฉเจฐเฉเจเจคเฉ เจเจฆเจฎ เจเฉเฉฑเจเจฃเจพ เจเฉฑเจ เจเฉฐเจเจพ เจตเจฟเจเจพเจฐ เจนเฉเจตเฉเจเจพเฅค
เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ, เจฎเฉเจ เจเจ เจกเฉเจเจฐ เจธเฉเจฐเฉฑเจเจฟเจ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฒเจ เจคเจฟเจเจฐ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจ
เจคเฉ เจเจธ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจเฉเจเฉ เจกเฉเจฎเฉ เจธเจเฉเจเจก เจจเฉเฉฐ เจเจฟเจตเฉเจ เจคเฉเจจเจพเจค เจเจฐเจจเจพ เจนเฉ เจฌเจพเจฐเฉ เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจจเฉเฉฐ เจธเจพเจเจเจพ เจเจฐเจพเจเจเจพเฅค เจคเฉเจธเฉเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจเจฟเฉฑเจคเจฐเจพเจ เจ
เจคเฉ เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจฆเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจตเจฟเจตเจธเจฅเจฟเจค เจเจฐเจจเจพ เจนเฉ เจเจธ เจจเจพเจฒ เจชเฉเจฐเจฏเฉเจ เจเจฐเจจ เจฒเจ เจธเจฎเฉฑเจเจฐเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจเจน เจธเจชเฉฑเจธเจผเจ เจนเฉ เจเจฟ เจนเจฐเฉเจ เจฆเจพ เจตเจฟเจเจพเจธ เจ
เจคเฉ เจฒเจพเจเฉ เจเจฐเจจ เจฆเจพ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเจพ เจตเฉฑเจเจฐเจพ เจนเฉ, เจเจธ เจฒเจ เจนเฉเจ เจพเจ เจฎเฉเจ เจเจ เจธเฉฐเจญเจต เจตเจฟเจเจฒเจช เจชเฉเจฐเจฆเจพเจจ เจเจฐเจพเจเจเจพเฅค
เจธเฉเจฐเฉฑเจเจฟเจ เจเจพเจเจ เจธเจนเฉเจฒเจคเจพเจ
เจเฉฑเจฅเฉ เจตเฉฑเจกเฉ เจเจฟเจฃเจคเฉ เจตเจฟเฉฑเจ เจตเฉฑเจ-เจตเฉฑเจ เจธเจนเจพเจเจ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจ
เจคเฉ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจนเจจ เจเฉ เจกเฉเจเจฐ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเฉ เจฆเฉ เจตเฉฑเจ-เจตเฉฑเจ เจชเจนเจฟเจฒเฉเจเจ 'เจคเฉ เจเจพเจเจ เจเจฐเจฆเฉเจเจ เจนเจจเฅค เจเจนเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉเจ เจฆเจพ เจตเจฐเจฃเจจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจชเจฟเจเจฒเฉ เจฒเฉเจ เจตเจฟเฉฑเจ เจเฉเจคเจพ เจเจพ เจเฉเฉฑเจเจพ เจนเฉ (
เจนเฉเจกเฉเจฒเจฟเฉฐเจ
เจเฉฑเจ เจเจพเจซเจผเฉ เจธเจงเจพเจฐเจจ เจเฉฐเจธเฉเจฒ เจเจชเจฏเฉเจเจคเจพ เจเฉ เจฎเจฆเจฆ เจเจฐเจฆเฉ เจนเฉ, เจเฉฑเจ เจชเจนเจฟเจฒเฉ เจ เจจเฉเจฎเจพเจจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ, เจกเฉเจเจฐเจซเจพเจเจฒ เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจฆเฉ เจธเจผเฉเฉฑเจงเจคเจพ เจ เจคเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจฆเจพ เจฎเฉเจฒเจพเจเจเจฃ เจเจฐเจจ เจตเจฟเฉฑเจ เจฎเจฆเจฆ เจเจฐเจฆเฉ เจนเฉ (เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจธเจฟเจฐเจซเจผ เจ เจงเจฟเจเจพเจฐเจค เจเจฟเฉฑเจคเจฐ เจฐเจเจฟเจธเจเจฐเฉเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจเจพเจ sudo เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ)เฅค
เจกเฉเจเจฒ
เจเฉฑเจ เจเฉฐเจธเฉเจฒ เจเจชเจฏเฉเจเจคเจพ เจเฉ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ (เจเจพเจ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจธเฉเจฐเฉฑเจเจฟเจ
เจค เจเจพเจฐ เจเจฐเจเจพเจเจต เจฆเฉ เจจเจพเจฒ) เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเฉ เจเฉ เจเจฟเจธเฉ เจเจพเจธ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจธเจผเฉเฉฑเจงเจคเจพ เจ
เจคเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจฆเฉ เจเจพเจเจ เจเจฐเจฆเฉ เจนเฉ เจเจฟเจตเฉเจ เจเจฟ, เจเจธ เจฆเฉเจเจ เจฒเฉเจ
เจฐเจพเจ เจ
เจคเฉ เจธเฉฐเจฐเจเจจเจพ เจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจฆเฉ เจนเฉ - เจเจฟเจนเฉเฉ เจเจชเจญเฉเจเจคเจพ เจฌเจฃเจพเจ เจเจ เจนเจจ, เจเจฟเจนเฉเฉเจเจ เจนเจฆเจพเจเจคเจพเจ เจตเจฐเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจ, เจเจฟเจนเฉเฉเจเจ เจตเฉเจฒเจฏเฉเจฎ เจฎเจพเจเจเจ เจเฉเจคเฉ เจเจ เจนเจจ, เจเฉฑเจ เจเจพเจฒเฉ เจชเจพเจธเจตเจฐเจก เจฆเฉ เจฎเฉเจเฉเจฆเจเฉ, เจเจฆเจฟ. d. เจนเฉเจฃ เจคเฉฑเจ เจเฉเจเจพเจ เจฆเฉ เจเจฟเจฃเจคเฉ เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจจเจนเฉเจ เจนเฉ เจ
เจคเฉ เจเจน เจธเจพเจกเฉเจเจ เจเจชเจฃเฉเจเจ เจเจ เจเจพเจเจเจพเจ เจ
เจคเฉ เจธเจฟเจซเจผเจพเจฐเจธเจผเจพเจ 'เจคเฉ เจ
เจงเจพเจฐเจค เจนเฉเฅค
เจคเฉเจฐเจฟเจตเฉ
เจเจธ เจธเจนเฉเจฒเจค เจฆเจพ เจเจฆเฉเจธเจผ เจฆเฉ เจเจฟเจธเจฎเจพเจ เจฆเฉเจเจ เจเจฎเจเจผเฉเจฐเฉเจเจ เจจเฉเฉฐ เจฒเฉฑเจญเจฃเจพ เจนเฉ - OS เจฌเจฟเจฒเจกเจพเจ (เจเจฒเจชเจพเจเจจ, เจฐเฉเฉฑเจกเจนเฉเจ (เจเจเจฒ), เจธเฉเจเจเจฐเฉเจธ, เจกเฉเจฌเฉเจ เจจ เจเฉเจเจจเจฏเฉ, เจเจฌเฉฐเจเฉ เจฆเฉเจเจฐเจพ เจธเจฎเจฐเจฅเจฟเจค) เจ เจคเฉ เจจเจฟเจฐเจญเจฐเจคเจพ (Gemfile.lock, Pipfile.lock, composer.lock, เจชเฉเจเฉเจ) เจจเจพเจฒ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจเฅค -lock.json , yarn.lock, cargo.lock)เฅค เจเฉเจฐเฉเจตเฉ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจ เจคเฉ เจเฉฑเจ เจธเจฅเจพเจจเจ เจเจฟเฉฑเจคเจฐ เจฆเฉเจตเจพเจ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐ เจธเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐ เจจเจพเจฒ เจเฉเจฐเจพเจเจธเจซเจฐ เจเฉเจคเฉ .tar เจซเจพเจเจฒ เจฆเฉ เจ เจงเจพเจฐ เจคเฉ เจตเฉ เจธเจเฉเจจ เจเจฐ เจธเจเจฆเจพ เจนเฉเฅค
เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฒเจ เจตเจฟเจเจฒเจช
เจเฉฑเจ เจ เจฒเฉฑเจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจ เจตเจฐเจฃเจฟเจค เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจจเฉเฉฐ เจ เจเจผเจฎเจพเจเจฃ เจฒเจ, เจฎเฉเจ เจเฉเจ เจธเจฐเจฒ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจตเจฟเฉฑเจ เจธเจพเจฐเฉเจเจ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจ เจฒเจ เจจเจฟเจฐเจฆเฉเจธเจผ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจพเจเจเจพเฅค
เจฎเฉเฉฑเจ เจตเจฟเจเจพเจฐ เจเจน เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจเจฐเจจเจพ เจนเฉ เจเจฟ เจคเฉเจธเฉเจ เจกเฉเจเจฐเจซเจพเจเจฒเจพเจ เจ เจคเฉ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐเจพเจ เจฆเฉ เจเจเฉเจฎเฉเจเจฟเจ เจธเจฎเจเจฐเฉ เจคเจธเจฆเฉเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจฒเจพเจเฉ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจเฉ เจตเจฟเจเจพเจธ เจฆเฉ เจฆเฉเจฐเจพเจจ เจฌเจฃเจพเจ เจเจ เจนเจจ.
เจเฉเฉฑเจ เจเจชเจฃเฉ เจเจช เจตเจฟเฉฑเจ เจนเฉเจ เจฒเจฟเจเฉ เจเจฆเจฎเจพเจ เจฆเฉ เจธเจผเจพเจฎเจฒ เจนเจจ:
- เจฒเจฟเฉฐเจเจฐ เจเจชเจฏเฉเจเจคเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจฆเฉ เจธเจผเฉเฉฑเจงเจคเจพ เจ เจคเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจฆเฉ เจเจพเจเจ เจเจฐเจจเจพ เจนเฉเจกเฉเจฒเจฟเฉฐเจ
- เจเจชเจฏเฉเจเจคเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจ เฉฐเจคเจฎ เจ เจคเฉ เจตเจฟเจเจเจพเจฐเจฒเฉ เจเจฟเฉฑเจคเจฐเจพเจ เจฆเฉ เจธเจผเฉเฉฑเจงเจคเจพ เจ เจคเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจฆเฉ เจเจพเจเจ เจเจฐเจจเจพ เจกเฉเจเจฒ
- เจฌเฉเจธ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจเจจเจคเจ เจคเฉเจฐ 'เจคเฉ เจเจพเจฃเฉเจเจ เจเจเจเจ เจเจฎเจเจผเฉเจฐเฉเจเจ (CVE) เจฆเฉ เจฎเฉเจเฉเจฆเจเฉ เจ เจคเฉ เจเจ เจจเจฟเจฐเจญเจฐเจคเจพเจตเจพเจ เจฆเฉ เจเจพเจเจ เจเจฐเจจเจพ - เจเจชเจฏเฉเจเจคเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจคเฉเจฐเจฟเจตเฉ
เจฌเจพเจ
เจฆ เจตเจฟเฉฑเจ เจฒเฉเจ เจตเจฟเฉฑเจ เจฎเฉเจ เจเจนเจจเจพเจ เจเจฆเจฎเจพเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฒเจ เจคเจฟเฉฐเจจ เจตเจฟเจเจฒเจช เจฆเฉเจตเจพเจเจเจพ:
เจชเจนเจฟเจฒเจพ เจเฉฑเจ เจเจฆเจพเจนเจฐเจจ เจฆเฉ เจคเฉเจฐ 'เจคเฉ GitLab เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ CI/CD เจชเจพเจเจชเจฒเจพเจเจจ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจเจพ เจนเฉ (เจเฉฑเจ เจเฉเจธเจ เจเจฆเจพเจนเจฐเจจ เจจเฉเฉฐ เจตเจงเจพเจเจฃ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจตเจฐเจฃเจจ เจฆเฉ เจจเจพเจฒ)เฅค
เจฆเฉเจเจพ เจธเจผเฉเฉฑเจฒ เจธเจเฉเจฐเจฟเจชเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจฐเจฟเจนเจพ เจนเฉ.
เจคเฉเจเฉ เจตเจฟเฉฑเจ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจเจฃเจพ เจธเจผเจพเจฎเจฒ เจนเฉเฅค
เจคเฉเจธเฉเจ เจเจน เจตเจฟเจเจฒเจช เจเฉเจฃ เจธเจเจฆเฉ เจนเฉ เจเฉ เจคเฉเจนเจพเจกเฉ เจฒเจ เจธเจญ เจคเฉเจ เจตเจงเฉเจ เจนเฉ, เจเจธเจจเฉเฉฐ เจเจชเจฃเฉ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเฉ เจตเจฟเฉฑเจ เจเฉเจฐเจพเจเจธเจซเจฐ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจ
เจคเฉ เจเจธเจจเฉเฉฐ เจคเฉเจนเจพเจกเฉเจเจ เจฒเฉเฉเจพเจ เจฎเฉเจคเจพเจฌเจ เจขเจพเจฒ เจธเจเจฆเฉ เจนเฉเฅค
เจธเจพเจฐเฉเจเจ เจฒเฉเฉเฉเจเจฆเฉเจเจ เจซเจพเจเจฒเจพเจ เจ
เจคเฉ เจตเจพเจงเฉ เจจเจฟเจฐเจฆเฉเจธเจผ เจตเฉ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจธเจฅเจฟเจค เจนเจจ:
GitLab CI/CD เจตเจฟเฉฑเจ เจเจเฉเจเจฐเจฃ
เจชเจนเจฟเจฒเฉ เจตเจฟเจเจฒเจช เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจฆเฉเจเจพเจเจเฉ เจเจฟ เจคเฉเจธเฉเจ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจตเจเฉเจ GitLab เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจธเจฟเจธเจเจฎ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจเจพเจเจเจพเจ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจฒเจพเจเฉ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจเฉฑเจฅเฉ เจ เจธเฉเจ เจชเฉเจพเจตเจพเจ เจตเจฟเฉฑเจเฉเจ เจฒเฉฐเจเจพเจเจเฉ เจ เจคเฉ เจเจน เจชเจคเจพ เจฒเจเจพเจตเจพเจเจเฉ เจเจฟ GitLab เจจเจพเจฒ เจเฉฑเจ เจเฉเจธเจ เจตเจพเจคเจพเจตเจฐเจฃ เจจเฉเฉฐ เจธเจเฉเจฐเฉเจ เจคเฉเจ เจเจฟเจตเฉเจ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจเจพ เจนเฉ, เจเฉฑเจ เจธเจเฉเจจเจฟเฉฐเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฌเจฃเจพเจเจฃเจพ เจนเฉ เจ เจคเฉ เจเฉเจธเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจ เจคเฉ เจเฉฑเจ เจฌเฉเจคเจฐเจคเฉเจฌ เจเจฟเฉฑเจคเจฐ - เจเฉเจธเจธเจผเฉเจช เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฒเจ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐเจจเจพ เจนเฉเฅค
GitLab เจเฉฐเจธเจเจพเจฒ เจเจฐเจจเจพ
1. เจกเฉเจเจฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉ:
sudo apt-get update && sudo apt-get install docker.io
2. เจฎเฉเจเฉเจฆเจพ เจเจชเจญเฉเจเจคเจพ เจจเฉเฉฐ เจกเฉเจเจฐ เจธเจฎเฉเจน เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจเจฐเฉ เจคเจพเจ เจเฉ เจคเฉเจธเฉเจ เจธเฉเจกเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจฌเจฟเจจเจพเจ เจกเฉเจเจฐ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐ เจธเจเฉ:
sudo addgroup <username> docker
3. เจเจชเจฃเจพ IP เจฒเฉฑเจญเฉ:
ip addr
4. เจเฉฐเจเฉเจจเจฐ เจตเจฟเฉฑเจ เจเจฟเฉฑเจเจฒเฉเจฌ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจ เจคเฉ เจฒเจพเจเจ เจเจฐเฉ, เจนเฉเจธเจเจจเจพเจฎ เจตเจฟเฉฑเจ IP เจเจกเจฐเฉเฉฑเจธ เจจเฉเฉฐ เจเจชเจฃเฉ เจเฉเจฆ เจฆเฉ เจจเจพเจฒ เจฌเจฆเจฒเฉ:
docker run --detach
--hostname 192.168.1.112
--publish 443:443 --publish 80:80
--name gitlab
--restart always
--volume /srv/gitlab/config:/etc/gitlab
--volume /srv/gitlab/logs:/var/log/gitlab
--volume /srv/gitlab/data:/var/opt/gitlab
gitlab/gitlab-ce:latest
เจ เจธเฉเจ เจเฉฐเจคเจเจผเจพเจฐ เจเจฐเจฆเฉ เจนเจพเจ เจเจฆเฉเจ เจคเฉฑเจ GitLab เจธเจพเจฐเฉเจเจ เจฒเฉเฉเฉเจเจฆเฉเจเจ เจธเจฅเจพเจชเจจเจพ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจจเจนเฉเจ เจเจฐ เจฒเฉเจเจฆเฉ (เจคเฉเจธเฉเจ เจฒเฉเจ เจซเจพเจเจฒ เจเจเจเจชเฉเฉฑเจ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจจเจฟเจเจฐเจพเจจเฉ เจเจฐ เจธเจเจฆเฉ เจนเฉ: docker logs -f gitlab)เฅค
5. เจฌเฉเจฐเจพเจเจเจผเจฐ เจตเจฟเฉฑเจ เจเจชเจฃเจพ เจธเจฅเจพเจจเจ IP เจเฉเจฒเฉเจนเฉ เจ
เจคเฉ เจเฉฑเจ เจชเฉฐเจจเจพ เจฆเฉเจเฉ เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจฐเฉเจ เจเจชเจญเฉเจเจคเจพ เจฒเจ เจชเจพเจธเจตเจฐเจก เจฌเจฆเจฒเจฃ เจฒเจ เจเจนเจฟเฉฐเจฆเจพ เจนเฉ:
เจเฉฑเจ เจจเจตเจพเจ เจชเจพเจธเจตเจฐเจก เจธเฉเฉฑเจ เจเจฐเฉ เจ
เจคเฉ GitLab 'เจคเฉ เจเจพเจเฅค
6. เจเฉฑเจ เจจเจตเจพเจ เจชเฉเจฐเฉเจเฉเจเจ เจฌเจฃเจพเจ, เจเจฆเจพเจนเจฐเจจ เจฒเจ cicd-เจเฉเจธเจ เจ
เจคเฉ เจเจธเจจเฉเฉฐ เจธเจเจพเจฐเจ เจซเจพเจเจฒ เจจเจพเจฒ เจธเจผเฉเจฐเฉ เจเจฐเฉ README.md:
7. เจนเฉเจฃ เจธเจพเจจเฉเฉฐ GitLab Runner เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ: เจเฉฑเจ เจเจเฉฐเจ เจเฉ เจฌเฉเจจเจคเฉ เจเจฐเจจ 'เจคเฉ เจธเจพเจฐเฉ เจเจผเจฐเฉเจฐเฉ เจเจชเจฐเฉเจธเจผเจจ เจเจฒเจพเจเจเจพเฅค
เจจเจตเฉเจจเจคเจฎ เจธเฉฐเจธเจเจฐเจฃ เจกเจพเจเจจเจฒเฉเจก เจเจฐเฉ (เจเจธ เจเฉเจธ เจตเจฟเฉฑเจ, เจฒเฉเจจเจเจธ 64-เจฌเจฟเฉฑเจ เจฒเจ):
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
8. เจเจธเจจเฉเฉฐ เจเจฒเจพเจเจฃเจฏเฉเจ เจฌเจฃเจพเจ:
sudo chmod +x /usr/local/bin/gitlab-runner
9. เจฐเจจเจฐ เจฒเจ เจเฉฑเจ OS เจเจชเจญเฉเจเจคเจพ เจธเจผเจพเจฎเจฒ เจเจฐเฉ เจ เจคเฉ เจธเฉเจตเจพ เจธเจผเฉเจฐเฉ เจเจฐเฉ:
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
เจเจน เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจพเจ เจฆเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ:
local@osboxes:~$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
Runtime platform arch=amd64 os=linux pid=8438 revision=0e5417a3 version=12.0.1
local@osboxes:~$ sudo gitlab-runner start
Runtime platform arch=amd64 os=linux pid=8518 revision=0e5417a3 version=12.0.1
10. เจนเฉเจฃ เจ
เจธเฉเจ เจฐเจจเจฐ เจจเฉเฉฐ เจฐเจเจฟเจธเจเจฐ เจเจฐเจฆเฉ เจนเจพเจ เจคเจพเจ เจเฉ เจเจน เจธเจพเจกเฉ GitLab เจเจฆเจพเจนเจฐเจจ เจจเจพเจฒ เจเฉฐเจเจฐเฉเจเจ เจเจฐ เจธเจเฉเฅค
เจ
เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, Settings-CI/CD เจชเฉฐเจจเจพ เจเฉเจฒเฉเจนเฉ (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) เจ
เจคเฉ เจฐเจจเจฐ เจเฉเจฌ 'เจคเฉ URL เจ
เจคเฉ เจฐเจเจฟเจธเจเฉเจฐเฉเจธเจผเจจ เจเฉเจเจจ เจฒเฉฑเจญเฉ:
11. URL เจ
เจคเฉ เจฐเจเจฟเจธเจเฉเจฐเฉเจธเจผเจจ เจเฉเจเจจ เจจเฉเฉฐ เจฌเจฆเจฒ เจเฉ เจฐเจจเจฐ เจฐเจเจฟเจธเจเจฐ เจเจฐเฉ:
sudo gitlab-runner register
--non-interactive
--url "http://<URL>/"
--registration-token "<Registration Token>"
--executor "docker"
--docker-privileged
--docker-image alpine:latest
--description "docker-runner"
--tag-list "docker,privileged"
--run-untagged="true"
--locked="false"
--access-level="not_protected"
เจจเจคเฉเจเฉ เจตเจเฉเจ, เจธเจพเจจเฉเฉฐ เจเฉฑเจ เจคเจฟเจเจฐ-เจเฉเจคเฉ เจเฉฐเจฎ เจเจฐเจจ เจตเจพเจฒเฉ GitLab เจฎเจฟเจฒเจฆเฉ เจนเฉ, เจเจฟเจธ เจตเจฟเฉฑเจ เจธเจพเจจเฉเฉฐ เจเจชเจฃเฉเจเจ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจจเฉเฉฐ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฒเจ เจจเจฟเจฐเจฆเฉเจธเจผ เจเฉเฉเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจเจธ เจกเฉเจฎเฉ เจตเจฟเฉฑเจ เจธเจพเจกเฉ เจเฉเจฒ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจเฉฐเจเฉเจจเจฐเจพเจเจเจผ เจเจฐเจจ เจฒเจ เจเจฆเจฎ เจจเจนเฉเจ เจนเจจ, เจชเจฐ เจเฉฑเจ เจ เจธเจฒ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจ เจเจน เจธเจเฉเจจเจฟเฉฐเจ เจเจฆเจฎเจพเจ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉเจฃเจเฉ เจ เจคเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจฒเจ เจเจฟเฉฑเจคเจฐ เจ เจคเฉ เจเฉฑเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจคเจฟเจเจฐ เจเจฐเจจเจเฉเฅค
เจชเจพเจเจชเจฒเจพเจเจจ เจธเฉฐเจฐเจเจจเจพ
1. เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจซเจพเจเจฒเจพเจ เจธเจผเจพเจฎเจฒ เจเจฐเฉ mydockerfile.df (เจเจน เจเฉฑเจ เจเฉเจธเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจนเฉ เจเจฟเจธเจฆเฉ เจ เจธเฉเจ เจเจพเจเจ เจเจฐเจพเจเจเฉ) เจ เจคเฉ GitLab CI/CD เจชเฉเจฐเจเจฟเจฐเจฟเจ เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ .gitlab-cicd.yml, เจเฉ เจธเจเฉเจจเจฐเจพเจ เจฒเจ เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจจเฉเฉฐ เจธเฉเจเฉเจฌเฉฑเจง เจเจฐเจฆเจพ เจนเฉ (เจซเจพเจเจฒ เจจเจพเจฎ เจตเจฟเฉฑเจ เจฌเจฟเฉฐเจฆเฉ เจจเฉเฉฐ เจจเฉเจ เจเจฐเฉ)เฅค
YAML เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจคเจฟเฉฐเจจ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ (เจนเฉเจกเฉเจฒเจฟเฉฐเจ, เจกเฉเจเจฒ เจ
เจคเฉ เจเฉเจฐเฉเจตเฉ) เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ เจจเจฟเจฐเจฆเฉเจธเจผ เจธเจผเจพเจฎเจฒ เจนเจจ เจเฉ เจเฉเจฃเฉ เจเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจ
เจคเฉ DOCKERFILE เจตเฉเจฐเฉเจเจฌเจฒ เจตเจฟเฉฑเจ เจฆเจฐเจธเจพเจ เจเจฟเฉฑเจคเจฐ เจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจจเจเฉเฅค เจธเจพเจฐเฉเจเจ เจฒเฉเฉเฉเจเจฆเฉเจเจ เจซเจพเจเจฒเจพเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจคเฉเจ เจฒเจเจเจ เจเจพ เจธเจเจฆเฉเจเจ เจนเจจ:
เจคเฉเจ เจ
เฉฐเจธเจผ mydockerfile.df (เจเจน เจเจชเจฏเฉเจเจคเจพ เจฆเฉ เจธเฉฐเจเจพเจฒเจจ เจจเฉเฉฐ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจเจฐเจจ เจฒเจ เจฎเจจเจฎเจพเจจเฉ เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจฆเฉ เจเฉฑเจ เจธเจฎเฉเจน เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเจฌเจธเจเจฐเฉเจเจ เจซเจพเจเจฒ เจนเฉ)เฅค เจซเจพเจเจฒ เจฆเจพ เจธเจฟเฉฑเจงเจพ เจฒเจฟเฉฐเจ:
mydockerfile.df เจฆเฉเจเจ เจธเจฎเฉฑเจเจฐเฉเจเจ
FROM amd64/node:10.16.0-alpine@sha256:f59303fb3248e5d992586c76cc83e1d3700f641cbcd7c0067bc7ad5bb2e5b489 AS tsbuild
COPY package.json .
COPY yarn.lock .
RUN yarn install
COPY lib lib
COPY tsconfig.json tsconfig.json
COPY tsconfig.app.json tsconfig.app.json
RUN yarn build
FROM amd64/ubuntu:18.04@sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
LABEL maintainer="Rhys Arkins <[email protected]>"
LABEL name="renovate"
...
COPY php.ini /usr/local/etc/php/php.ini
RUN cp -a /tmp/piik/* /var/www/html/
RUN rm -rf /tmp/piwik
RUN chown -R www-data /var/www/html
ADD piwik-cli-setup /piwik-cli-setup
ADD reset.php /var/www/html/
## ENTRYPOINT ##
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER root
เจธเฉฐเจฐเจเจจเจพ YAML เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉ (เจซเจพเจเจฒ เจเฉเจฆ เจเฉฑเจฅเฉ เจธเจฟเฉฑเจงเฉ เจฒเจฟเฉฐเจ เจฐเจพเจนเฉเจ เจฒเฉฑเจญเฉ เจเจพ เจธเจเจฆเฉ เจนเฉ:
.gitlab-ci.yml เจฆเฉ เจธเจฎเฉฑเจเจฐเฉ
variables:
DOCKER_HOST: "tcp://docker:2375/"
DOCKERFILE: "mydockerfile.df" # name of the Dockerfile to analyse
DOCKERIMAGE: "bkimminich/juice-shop" # name of the Docker image to analyse
# DOCKERIMAGE: "knqyf263/cve-2018-11235" # test Docker image with several CRITICAL CVE
SHOWSTOPPER_PRIORITY: "CRITICAL" # what level of criticality will fail Trivy job
TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # where to cache Trivy database of vulnerabilities for faster reuse
ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
services:
- docker:dind # to be able to build docker images inside the Runner
stages:
- scan
- report
- publish
HadoLint:
# Basic lint analysis of Dockerfile instructions
stage: scan
image: docker:git
after_script:
- cat $ARTIFACT_FOLDER/hadolint_results.json
script:
- export VERSION=$(wget -q -O - https://api.github.com/repos/hadolint/hadolint/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
- wget https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 && chmod +x hadolint-Linux-x86_64
# NB: hadolint will always exit with 0 exit code
- ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
artifacts:
when: always # return artifacts even after job failure
paths:
- $ARTIFACT_FOLDER/hadolint_results.json
Dockle:
# Analysing best practices about docker image (users permissions, instructions followed when image was built, etc.)
stage: scan
image: docker:git
after_script:
- cat $ARTIFACT_FOLDER/dockle_results.json
script:
- export VERSION=$(wget -q -O - https://api.github.com/repos/goodwithtech/dockle/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
- wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && tar zxf dockle_${VERSION}_Linux-64bit.tar.gz
- ./dockle --exit-code 1 -f json --output $ARTIFACT_FOLDER/dockle_results.json $DOCKERIMAGE
artifacts:
when: always # return artifacts even after job failure
paths:
- $ARTIFACT_FOLDER/dockle_results.json
Trivy:
# Analysing docker image and package dependencies against several CVE bases
stage: scan
image: docker:git
script:
# getting the latest Trivy
- apk add rpm
- export VERSION=$(wget -q -O - https://api.github.com/repos/knqyf263/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
- wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz && tar zxf trivy_${VERSION}_Linux-64bit.tar.gz
# displaying all vulnerabilities w/o failing the build
- ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE
# write vulnerabilities info to stdout in human readable format (reading pure json is not fun, eh?). You can remove this if you don't need this.
- ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE
# failing the build if the SHOWSTOPPER priority is found
- ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
artifacts:
when: always # return artifacts even after job failure
paths:
- $ARTIFACT_FOLDER/trivy_results.json
cache:
paths:
- .cache
Report:
# combining tools outputs into one HTML
stage: report
when: always
image: python:3.5
script:
- mkdir json
- cp $ARTIFACT_FOLDER/*.json ./json/
- pip install json2html
- wget https://raw.githubusercontent.com/shad0wrunner/docker_cicd/master/convert_json_results.py
- python ./convert_json_results.py
artifacts:
paths:
- results.html
เจเฉ เจเจฐเฉเจฐเฉ เจนเฉเจตเฉ, เจคเจพเจ เจคเฉเจธเฉเจ .tar เจเจฐเจเจพเจเจต เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจเฉเจคเฉเจเจ เจคเจธเจตเฉเจฐเจพเจ เจจเฉเฉฐ เจตเฉ เจธเจเฉเจจ เจเจฐ เจธเจเจฆเฉ เจนเฉ (เจนเจพเจฒเจพเจเจเจฟ, เจคเฉเจนเจพเจจเฉเฉฐ YAML เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจฒเจ เจเจจเจชเฉเจ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจฌเจฆเจฒเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉเจตเฉเจเฉ)
เจจเฉเจ: เจเฉเจฐเฉเจตเฉ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ Rpm ะธ Git. เจจเจนเฉเจ เจคเจพเจ, เจเจน RedHat-เจ เจงเจพเจฐเจฟเจค เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเจจ เจ เจคเฉ เจเจฎเจเจผเฉเจฐเฉ เจกเฉเจเจพเจฌเฉเจธ เจฒเจ เจ เฉฑเจชเจกเฉเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจตเฉเจฒเฉ เจเจฒเจคเฉเจเจ เจชเฉเจฆเจพ เจเจฐเฉเจเจพเฅค
2. เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจเฉเฉเจจ เจคเฉเจ เจฌเจพเจ เจฆ, เจธเจพเจกเฉ เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจฆเจฟเฉฑเจคเฉเจเจ เจนเจฆเจพเจเจคเจพเจ เจฆเฉ เจ เจจเฉเจธเจพเจฐ, GitLab เจเจชเจฃเฉ เจเจช เจฌเจฟเจฒเจก เจ เจคเฉ เจธเจเฉเจจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจธเจผเฉเจฐเฉ เจเจฐ เจฆเฉเจตเฉเจเฉเฅค CI/CD โ เจชเจพเจเจชเจฒเจพเจเจจ เจเฉเจฌ 'เจคเฉ เจคเฉเจธเฉเจ เจนเจฆเจพเจเจคเจพเจ เจฆเฉ เจชเฉเจฐเจเจคเฉ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉเฅค
เจจเจคเฉเจเฉ เจตเจเฉเจ, เจธเจพเจกเฉ เจเฉเจฒ เจเจพเจฐ เจเฉฐเจฎ เจนเจจ. เจเจนเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจคเจฟเฉฐเจจ เจธเจเฉเจจเจฟเฉฐเจ เจจเจพเจฒ เจธเจฟเฉฑเจงเฉ เจคเฉเจฐ 'เจคเฉ เจจเจเจฟเฉฑเจ เจฆเฉ เจนเจจ, เจ
เจคเฉ เจเจเจฐเฉ เจเฉฑเจ (เจฐเจฟเจชเฉเจฐเจ) เจธเจเฉเจจเจฟเฉฐเจ เจจเจคเฉเจเจฟเจเจ เจฆเฉ เจจเจพเจฒ เจเจฟเฉฐเจกเฉ เจนเฉเจ เจซเจพเจเจฒเจพเจ เจคเฉเจ เจเฉฑเจ เจธเจงเจพเจฐเจจ เจฐเจฟเจชเฉเจฐเจ เจเจเฉฑเจ เฉ เจเจฐเจฆเฉ เจนเฉเฅค
เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ, เจเฉเจฐเฉเจตเฉ เจเฉฑเจฒเจฃเจพ เจฌเฉฐเจฆ เจเจฐ เจฆเจฟเฉฐเจฆเจพ เจนเฉ เจเฉเจเจฐ เจเจฟเฉฑเจคเจฐ เจเจพเจ เจจเจฟเจฐเจญเจฐเจคเจพ เจตเจฟเฉฑเจ เจเฉฐเจญเฉเจฐ เจเจฎเจเจผเฉเจฐเฉเจเจ เจฆเจพ เจชเจคเจพ เจฒเจเจพเจเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจธเฉ เจธเจฎเฉเจ, เจนเฉเจกเฉเจฒเจฟเฉฐเจ เจนเจฎเฉเจธเจผเจพ เจเฉฑเจ เจธเจซเจฒเจคเจพ เจเฉเจก เจตเจพเจชเจธ เจเจฐเจฆเจพ เจนเฉ เจเจฟเจเจเจเจฟ เจเจน เจนเจฎเฉเจธเจผเจพ เจเจฟเฉฑเจชเจฃเฉเจเจ เจตเจฟเฉฑเจ เจจเจคเฉเจเจพ เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจเจฟเจธ เจจเจพเจฒ เจฌเจฟเจฒเจก เจจเฉเฉฐ เจฐเฉเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉ.
เจคเฉเจนเจพเจกเฉเจเจ เจเจพเจธ เจฒเฉเฉเจพเจ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจเจฐเจฆเฉ เจนเฉเจ, เจคเฉเจธเฉเจ เจเฉฑเจ เจเจเจเจผเจฟเจ เจเฉเจก เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจคเจพเจ เจเฉ เจเจฆเฉเจ เจเจน เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจเจฟเจธเฉ เจเจพเจธ เจเฉฐเจญเฉเจฐเจคเจพ เจฆเฉเจเจ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจฆเจพ เจชเจคเจพ เจฒเจเจพเจเจเจฆเฉเจเจ เจนเจจ, เจคเจพเจ เจเจน เจฌเจฟเจฒเจก เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจตเฉ เจฐเฉเจเจฆเฉเจเจ เจนเจจเฅค เจธเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจฌเจฟเจฒเจก เจคเจพเจ เจนเฉ เจฌเฉฐเจฆ เจนเฉ เจเจพเจตเฉเจเจพ เจเฉเจเจฐ เจเฉเจฐเฉเจตเฉ เจเจธ เจจเจพเจเจผเฉเจเจคเจพ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเจฎเจเจผเฉเจฐเฉ เจฆเจพ เจชเจคเจพ เจฒเจเจพเจเจเจฆเฉ เจนเฉ เจเฉ เจ
เจธเฉเจ เจธเจผเฉเจธเจเฉเจชเจฐ เจตเฉเจฐเฉเจเจฌเจฒ เจตเจฟเฉฑเจ เจฆเจฐเจธเจพเจ เจนเฉเฅค .gitlab-ci.yml.
เจนเจฐเฉเจ เจเจชเจฏเฉเจเจคเจพ เจฆเจพ เจจเจคเฉเจเจพ เจนเจฐเฉเจ เจธเจเฉเจจเจฟเฉฐเจ เจเจพเจฐเจ เจฆเฉ เจฒเฉเจ เจตเจฟเฉฑเจ เจฆเฉเจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจเจฐเจเฉเจซเฉเจเจ เจญเจพเจ เจตเจฟเฉฑเจ เจธเจฟเฉฑเจงเฉ json เจซเจพเจเจฒเจพเจ เจตเจฟเฉฑเจ, เจเจพเจ เจเฉฑเจ เจธเจงเจพเจฐเจจ HTML เจฐเจฟเจชเฉเจฐเจ เจตเจฟเฉฑเจ (เจนเฉเจ เจพเจ เจเจธ เจฌเจพเจฐเฉ เจนเฉเจฐ):
3. เจเจชเจฏเฉเจเจคเจพ เจฐเจฟเจชเฉเจฐเจเจพเจ เจจเฉเฉฐ เจฅเฉเฉเฉเจนเจพ เจนเฉเจฐ เจฎเจจเฉเฉฑเจเฉ-เจชเฉเฉเจนเจจ เจฏเฉเจ เจฐเฉเจช เจตเจฟเฉฑเจ เจชเฉเจธเจผ เจเจฐเจจ เจฒเจ, เจเฉฑเจ เจเฉเจเฉ เจชเจพเจเจฅเจจ เจธเจเฉเจฐเจฟเจชเจ เจฆเฉ เจตเจฐเจคเฉเจ เจคเจฟเฉฐเจจ JSON เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจเฉฑเจ HTML เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจจเฉเจเจธ เจฆเฉ เจธเจพเจฐเจฃเฉ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฃ เจฒเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค
เจเจน เจธเจเฉเจฐเจฟเจชเจ เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจฐเจฟเจชเฉเจฐเจ เจเจพเจธเจ เจฆเฉเจเจฐเจพ เจฒเจพเจเจ เจเฉเจคเฉ เจเจ เจนเฉ, เจ
เจคเฉ เจเจธเจฆเจพ เจ
เฉฐเจคเจฎ เจเจฐเจเฉเจซเฉเจเจ เจเฉฑเจ เจฐเจฟเจชเฉเจฐเจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ HTML เจซเจพเจเจฒ เจนเฉเฅค เจธเจเฉเจฐเจฟเจชเจ เจธเจฐเฉเจค เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจตเฉ เจนเฉ เจ
เจคเฉ เจเจธเจจเฉเฉฐ เจคเฉเจนเจพเจกเฉเจเจ เจฒเฉเฉเจพเจ, เจฐเฉฐเจเจพเจ เจเจฆเจฟ เจฆเฉ เจ
เจจเฉเจเฉเจฒ เจฌเจฃเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
เจธเจผเฉเฉฑเจฒ เจธเจเฉเจฐเจฟเจชเจ
เจฆเฉเจเจพ เจตเจฟเจเจฒเจช เจเจนเจจเจพเจ เจฎเจพเจฎเจฒเจฟเจเจ เจฒเจ เจขเฉเจเจตเจพเจ เจนเฉ เจเจฆเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ CI/CD เจธเจฟเจธเจเจฎ เจคเฉเจ เจฌเจพเจนเจฐ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐเจพเจ เจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ เจเจพเจ เจคเฉเจนเจพเจกเฉ เจเฉเจฒ เจเฉฑเจ เจซเจพเจฐเจฎ เจตเจฟเฉฑเจ เจธเจพเจฐเฉเจเจ เจนเจฆเจพเจเจคเจพเจ เจนเฉเจฃเฉเจเจ เจเจพเจนเฉเจฆเฉเจเจ เจนเจจ เจเฉ เจธเจฟเฉฑเจงเฉ เจนเฉเจธเจ 'เจคเฉ เจฒเจพเจเฉ เจเฉเจคเฉเจเจ เจเจพ เจธเจเจฆเฉเจเจ เจนเจจเฅค เจเจน เจตเจฟเจเจฒเจช เจเฉฑเจ เจฐเฉเจกเฉเจฎเฉเจก เจธเจผเฉเฉฑเจฒ เจธเจเฉเจฐเจฟเจชเจ เจฆเฉเจเจฐเจพ เจเจตเจฐ เจเฉเจคเจพ เจเจฟเจ เจนเฉ เจเฉ เจเฉฑเจ เจธเจพเจซเจผ เจตเจฐเจเฉเจ เจฒ (เจเจพเจ เจ เจธเจฒเฉ) เจฎเจธเจผเฉเจจ เจคเฉ เจเจฒเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจธเจเฉเจฐเจฟเจชเจ เจเจนเฉ เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจเจฆเฉ เจนเฉ เจเจฟเจตเฉเจ เจเจฟ เจเฉฑเจชเจฐ เจฆเฉฑเจธเฉ เจเจฟเจเจฒเฉเจฌ-เจฐเจจเจฐ.
เจธเจเฉเจฐเจฟเจชเจ เจจเฉเฉฐ เจธเจซเจฒเจคเจพเจชเฉเจฐเจตเจ เจเจฒเจพเจเจฃ เจฒเจ, เจกเฉเจเจฐ เจธเจฟเจธเจเจฎ เจคเฉ เจธเจฅเจพเจชเจฟเจค เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจ เจคเฉ เจฎเฉเจเฉเจฆเจพ เจเจชเจญเฉเจเจคเจพ เจกเฉเจเจฐ เจธเจฎเฉเจน เจตเจฟเฉฑเจ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
เจธเจเฉเจฐเจฟเจชเจ เจเฉเจฆ เจเฉฑเจฅเฉ เจฒเฉฑเจญเฉ เจเจพ เจธเจเจฆเฉ เจนเฉ:
เจซเจพเจเจฒ เจฆเฉ เจธเจผเฉเจฐเฉ เจตเจฟเฉฑเจ, เจตเฉเจฐเฉเจเจฌเจฒ เจเจน เจฆเจฐเจธเจพเจเจเจฆเฉ เจนเจจ เจเจฟ เจเจฟเจธ เจเจฟเฉฑเจคเจฐ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจ เจคเฉ เจเจฟเจนเฉเฉเจเจ เจจเจพเจเจผเฉเจเจคเจพ เจจเฉเจเจธ เจเฉเจฐเฉเจตเฉ เจเจชเจฏเฉเจเจคเจพ เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฒเจคเฉ เจเฉเจก เจจเจพเจฒ เจฌเจพเจนเจฐ เจเจพเจฃ เจฆเจพ เจเจพเจฐเจจ เจฌเจฃเจฆเฉ เจนเจจเฅค
เจธเจเฉเจฐเจฟเจชเจ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจฆเฉเจฐเจพเจจ, เจธเจพเจฐเฉเจเจ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจจเฉเฉฐ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจตเจฟเฉฑเจ เจกเจพเจเจจเจฒเฉเจก เจเฉเจคเจพ เจเจพเจตเฉเจเจพ docker_tools, เจเจนเจจเจพเจ เจฆเฉ เจเฉฐเจฎ เจฆเฉ เจจเจคเฉเจเฉ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจตเจฟเฉฑเจ เจนเจจ docker_tools/json, เจ เจคเฉ เจฐเจฟเจชเฉเจฐเจ เจฆเฉ เจจเจพเจฒ HTML เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจนเฉเจตเฉเจเจพ results.html.
เจเจฆเจพเจนเจฐเจจ เจธเจเฉเจฐเจฟเจชเจ เจเจเจเจชเฉเฉฑเจ
~/docker_cicd$ ./docker_sec_check.sh
[+] Setting environment variables
[+] Installing required packages
[+] Preparing necessary directories
[+] Fetching sample Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - โDockerfileโ saved [8071/8071]
[+] Pulling image to scan
latest: Pulling from bkimminich/juice-shop
[+] Running Hadolint
...
Dockerfile:205 DL3015 Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:248 DL3002 Last USER should not be root
...
[+] Running Dockle
...
WARN - DKL-DI-0006: Avoid latest tag
* Avoid 'latest' tag
INFO - CIS-DI-0005: Enable Content trust for Docker
* export DOCKER_CONTENT_TRUST=1 before docker pull/build
...
[+] Running Trivy
juice-shop/frontend/package-lock.json
=====================================
Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)
+---------------------+------------------+----------+---------+-------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | VERSION | TITLE |
+---------------------+------------------+----------+---------+-------------------------+
| object-path | CVE-2020-15256 | HIGH | 0.11.4 | Prototype pollution in |
| | | | | object-path |
+---------------------+------------------+ +---------+-------------------------+
| tree-kill | CVE-2019-15599 | | 1.2.2 | Code Injection |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262 | LOW | 1.4.1 | Unprotected dynamically |
| | | | | loaded chunks |
+---------------------+------------------+----------+---------+-------------------------+
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
juice-shop/package-lock.json
============================
Total: 5 (CRITICAL: 5)
...
[+] Removing left-overs
[+] Making the output look pretty
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html
เจธเจพเจฐเฉเจเจ เจธเจนเฉเจฒเจคเจพเจ เจฆเฉ เจจเจพเจฒ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐ
เจคเฉเจเฉ เจตเจฟเจเจฒเจช เจตเจเฉเจ, เจฎเฉเจ เจธเฉเจฐเฉฑเจเจฟเจ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจเจฃ เจฒเจ เจฆเฉ เจธเจงเจพเจฐเจจ เจกเฉเจเจฐเจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจเฉฐเจชเจพเจเจฒ เจเฉเจคเจพ เจนเฉเฅค เจเฉฑเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจเฉฑเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจคเฉเจ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจธเฉเฉฑเจ เจฌเจฃเจพเจเจฃ เจตเจฟเฉฑเจ เจฎเจฆเจฆ เจเจฐเฉเจเฉ, เจฆเฉเจเฉ (เจกเฉเจเจฐเจซเจพเจเจฒ_เจเจพเจฐ) เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเจพเจฐ เจซเจพเจเจฒ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจธเฉเฉฑเจ เจฌเจฃเจพเจเจฃ เจตเจฟเฉฑเจ เจฎเจฆเจฆ เจเจฐเฉเจเฉเฅค
1. เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจคเฉเจ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจกเฉเจเจฐ เจซเจพเจเจฒ เจ
เจคเฉ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจฒเจ
2. เจ
เจธเฉเจ เจเจธเจจเฉเฉฐ เจ
เจธเฉเจเจฌเจฒเฉ เจฒเจ เจฒเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจ:
docker build -t dscan:image -f docker_security.df .
3. เจ เจธเฉเจเจฌเจฒเฉ เจชเฉเจฐเฉ เจนเฉเจฃ เจคเฉเจ เจฌเจพเจ เจฆ, เจ เจธเฉเจ เจเจฟเฉฑเจคเจฐ เจคเฉเจ เจเฉฑเจ เจเฉฐเจเฉเจจเจฐ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ. เจเจธเฉ เจธเจฎเฉเจ, เจ เจธเฉเจ DOCKERIMAGE เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒ เจจเฉเฉฐ เจเจธ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจจเจพเจฎ เจจเจพเจฒ เจชเจพเจธ เจเจฐเจฆเฉ เจนเจพเจ เจเจฟเจธ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจฆเจฟเจฒเจเจธเจชเฉ เจฐเฉฑเจเจฆเฉ เจนเจพเจ เจ เจคเฉ เจกเฉเจเจฐเจซเจพเจเจฒ เจจเฉเฉฐ เจฎเจพเจเจเจ เจเจฐเจฆเฉ เจนเจพเจ เจเจฟเจธเจฆเจพ เจ เจธเฉเจ เจเจชเจฃเฉ เจฎเจธเจผเฉเจจ เจคเฉเจ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจพเจเฅค /เจกเฉเจเจฐเจซเจพเจเจฒ (เจจเฉเจ เจเจฐเฉ เจเจฟ เจเจธ เจซเจพเจเจฒ เจฒเจ เจชเฉเจฐเจพ เจฎเจพเจฐเจ เจฒเฉเฉเฉเจเจฆเจพ เจนเฉ):
docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image
[+] Setting environment variables
[+] Running Hadolint
/Dockerfile:3 DL3006 Always tag the version of an image explicitly
[+] Running Dockle
WARN - DKL-DI-0006: Avoid latest tag
* Avoid 'latest' tag
INFO - CIS-DI-0005: Enable Content trust for Docker
* export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
* not found HEALTHCHECK statement
INFO - DKL-LI-0003: Only put necessary files
* unnecessary file : juice-shop/node_modules/sqlite3/Dockerfile
* unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
* unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Running Trivy
...
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Making the output look pretty
[+] Starting the main module ============================================================
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html
ะ ะตะทัะปััะฐัั
เจ เจธเฉเจ เจกเฉเจเจฐ เจเจฒเจพเจคเจฎเจ เจเฉเจเจผเจพเจ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเจจ เจฒเจ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจฆเฉ เจธเจฟเจฐเจซ เจเฉฑเจ เจฌเฉเจจเจฟเจเจฆเฉ เจธเจฎเฉเจน เจจเฉเฉฐ เจฆเฉเจเจฟเจ, เจเฉ เจเจฟ, เจฎเฉเจฐเฉ เจฐเจพเจ เจตเจฟเฉฑเจ, เจฌเจนเฉเจค เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ เจขเฉฐเจ เจจเจพเจฒ เจเจฟเฉฑเจคเจฐ เจธเฉเจฐเฉฑเจเจฟเจ เจฒเฉเฉเจพเจ เจฆเฉ เจเฉฑเจ เจตเจงเฉเจ เจนเจฟเฉฑเจธเฉ เจจเฉเฉฐ เจเจตเจฐ เจเจฐเจฆเจพ เจนเฉ. เจเฉฑเจฅเฉ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจญเฉเจเจคเจพเจจ เจเฉเจคเฉ เจ เจคเฉ เจฎเฉเจซเจค เจเฉเจฒ เจตเฉ เจนเจจ เจเฉ เจเฉฑเจเฉ เจเจฟเจนเฉเจเจ เจเจพเจเจเจพเจ เจเจฐ เจธเจเจฆเฉ เจนเจจ, เจธเฉเฉฐเจฆเจฐ เจฐเจฟเจชเฉเจฐเจเจพเจ เจฌเจฃเจพ เจธเจเจฆเฉ เจนเจจ เจเจพเจ เจเฉฐเจธเฉเจฒ เจฎเฉเจก เจตเจฟเฉฑเจ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจเฉฐเจฎ เจเจฐ เจธเจเจฆเฉ เจนเจจ, เจเฉฐเจเฉเจจเจฐ เจชเฉเจฐเจฌเฉฐเจงเจจ เจชเฉเจฐเจฃเจพเจฒเฉเจเจ เจเจฆเจฟ เจจเฉเฉฐ เจเจตเจฐ เจเจฐ เจธเจเจฆเฉ เจนเจจเฅค .
เจฒเฉเจ เจตเจฟเฉฑเจ เจตเจฐเจฃเจฟเจค เจเฉเจฒเจธ เจฆเฉ เจธเฉเฉฑเจ เจฌเจพเจฐเฉ เจเฉฐเจเฉ เจเฉฑเจฒ เจเจน เจนเฉ เจเจฟ เจเจน เจธเจพเจฐเฉ เจเจชเจจ เจธเฉเจฐเจธ เจเฉเจก 'เจคเฉ เจฌเจฃเจพเจ เจเจ เจนเจจ เจ เจคเฉ เจคเฉเจธเฉเจ เจเจนเจจเจพเจ เจ เจคเฉ เจนเฉเจฐ เจธเจฎเจพเจจ เจเฉเจฒเจพเจ เจจเจพเจฒ เจชเฉเจฐเจฏเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจเจฟ เจคเฉเจนเจพเจกเฉเจเจ เจฒเฉเฉเจพเจ เจ เจคเฉ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเฉ เจฆเฉเจเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจฆเฉ เจ เจจเฉเจเฉเจฒ เจเฉ เจนเฉเฅค เจฌเฉเจธเจผเฉฑเจ, เจธเจพเจฐเฉเจเจ เจเจฎเจเจผเฉเจฐเฉเจเจ เจเฉ เจฎเจฟเจฒเจฆเฉเจเจ เจนเจจ, เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจพเจธ เจนเจพเจฒเจคเจพเจ เจตเจฟเฉฑเจ เจฒเจพเจเฉ เจเจฐเจจ เจฒเจ เจ เจงเจฟเจเจจ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจชเจฐ เจเจน เจญเจตเจฟเฉฑเจ เจฆเฉ เจตเฉฑเจกเฉ เจฒเฉเจ เจฒเจ เจเฉฑเจ เจตเจฟเจธเจผเจพ เจนเฉเฅค
เจฎเฉเจจเฉเฉฐ เจเจฎเฉเจฆ เจนเฉ เจเจฟ เจเจน เจเจพเจเจก, เจธเจเฉเจฐเจฟเจชเจเจพเจ เจ
เจคเฉ เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจคเฉเจนเจพเจกเฉ เจฎเจฆเจฆ เจเจฐเจจเจเฉเจเจ เจ
เจคเฉ เจเฉฐเจเฉเจจเจฐเจพเจเจเจผเฉเจธเจผเจจ เจฆเฉ เจเฉเจคเจฐ เจตเจฟเฉฑเจ เจตเจงเฉเจฐเฉ เจธเฉเจฐเฉฑเจเจฟเจ
เจค เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเจพ เจฌเจฃเจพเจเจฃ เจฒเจ เจเฉฑเจ เจธเจผเฉเจฐเฉเจเจคเฉ เจฌเจฟเฉฐเจฆเฉ เจฌเจฃ เจเจพเจฃเจเฉเจเจเฅค
เจธเจฐเฉเจค: www.habr.com