เชนเซ เชนเชฌเชฐ!
เชเชเชจเซ เชตเชพเชธเซเชคเชตเชฟเชเชคเชพเชฎเชพเช, เชตเชฟเชเชพเชธ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชเชฎเชพเช เชเชจเซเชเซเชจเชฐเชพเชเชเซเชถเชจเชจเซ เชตเชงเชคเซ เชเชคเซ เชญเซเชฎเชฟเชเชพเชจเซ เชเชพเชฐเชฃเซ, เชเชจเซเชเซเชจเชฐ เชธเชพเชฅเซ เชธเชเชเชณเชพเชฏเซเชฒเชพ เชตเชฟเชตเชฟเชง เชคเชฌเชเซเชเชพเช เช เชจเซ เชธเชเชธเซเชฅเชพเชเชจเซ เชธเซเชฐเชเซเชทเชพ เชธเซเชจเชฟเชถเซเชเชฟเชค เชเชฐเชตเชพเชจเซ เชฎเซเชฆเซเชฆเซ เชเซเชฒเซเชฒเชพ เชธเซเชฅเชพเชจเซ เชจเชฅเซ. เชเชพเชคเซ เชคเชชเชพเชธ เชเชฐเชตเซ เช เชเช เชเชชเชฐเซเช เชเชพเชฐเซเชฏ เชเซ, เชคเซเชฅเซ เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชเชเชพเชฎเชพเช เชเชเชพ เชชเซเชฐเชพเชฐเชเชญเชฟเช เชชเชเชฒเชพเช เชฒเซเชตเชพเชจเซเช เชธเชฐเชธ เชฐเชนเซเชถเซ.
เช เชฒเซเชเชฎเชพเช, เชนเซเช เชเชฃเซ เชกเซเชเชฐ เชธเซเชฐเชเซเชทเชพ เชเชชเชฏเซเชเชฟเชคเชพเชเชจเซ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพ เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชธเซเชเซเชฐเชฟเชชเซเชเซ เช
เชจเซ เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชเชพเชธเชตเชพ เชฎเชพเชเซ เชเช เชจเชพเชจเซเช เชกเซเชฎเซ เชธเซเชเซเชจเซเชก เชเซเชตเซ เชฐเซเชคเซ เชธเซเช เชเชฐเชตเซเช เชคเซเชจเซ เชธเซเชเชจเชพเช เชถเซเชฐ เชเชฐเซเชถ. เชคเชฎเซ เชกเซเชเชฐเชซเชพเชเชฒ เชเชฌเซเช เช
เชจเซ เชธเซเชเชจเชพเชเชจเซ เชธเซเชฐเชเซเชทเชพเชจเชพ เชชเชฐเซเชเซเชทเชฃเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชเซเช เชตเชตเซ เชคเซ เช
เชเชเซ เชชเซเชฐเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชธเชพเชฎเชเซเชฐเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ. เชคเซ เชธเซเชชเชทเซเช เชเซ เชเซ เชตเชฟเชเชพเชธ เช
เชจเซ เช
เชฎเชฒเซเชเชฐเชฃ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชฆเชฐเซเช เชฎเชพเชเซ เช
เชฒเช เชเซ, เชคเซเชฅเซ เชจเซเชเซ เชนเซเช เชเซเชเชฒเชพเช เชธเชเชญเชตเชฟเชค เชตเชฟเชเชฒเซเชชเซ เชเชชเซเชถ.
เชธเซเชฐเชเซเชทเชพ เชคเชชเชพเชธ เชเชชเชฏเซเชเชฟเชคเชพเช
เชกเซเชเชฐ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐเชจเชพ เชตเชฟเชตเชฟเชง เชชเชพเชธเชพเช เชชเชฐ เชคเชชเชพเชธ เชเชฐเชคเซ เชตเชฟเชตเชฟเชง เชธเชนเชพเชฏเช เชเชชเซเชฒเชฟเชเซเชถเชจเซ เช
เชจเซ เชธเซเชเซเชฐเชฟเชชเซเชเซ เชฎเซเชเซ เชธเชเชเซเชฏเชพเชฎเชพเช เชเซ. เชคเซเชฎเชพเชเชฅเซ เชเซเชเชฒเชพเชเชจเซเช เช
เชเชพเชเชจเชพ เชฒเซเชเชฎเชพเช เชตเชฐเซเชฃเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ (
เชนเซเชกเซเชฒเชฟเชจเซเช
เชเชเชฆเชฎ เชธเชฐเชณ เชเชจเซเชธเซเชฒ เชฏเซเชเชฟเชฒเชฟเชเซ เชเซ เชเซ เชกเซเชเชฐเชซเชพเชเชฒ เชธเซเชเชจเชพเชเชจเซ เชธเชเซเชเชคเชพ เช เชจเซ เชธเชฒเชพเชฎเชคเซเชจเซเช เชชเซเชฐเชฅเชฎ เชฎเซเชฒเซเชฏเชพเชเชเชจ เชเชฐเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชซเชเซเชค เชฎเชพเชจเซเชฏ เชเชฎเซเช เชฐเชเชฟเชธเซเชเซเชฐเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชฅเชตเชพ เชธเซเชกเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ).
เชกเซเชเชฒ
เชเชจเซเชธเซเชฒ เชฏเซเชเชฟเชฒเชฟเชเซ เชเซ เชเซ เชเชฎเซเช (เช
เชฅเชตเชพ เชธเซเชต เชเชฐเซเชฒเซ เชเชฎเซเช เชเชพเชฐเชฌเซเชฒ เชชเชฐ) เชชเชฐ เชเชพเชฎ เชเชฐเซ เชเซ เชเซ เชเซเชเซเชเชธ เชเชฎเซเชเชจเซ เชเซเชเชธเชพเช เช
เชจเซ เชธเซเชฐเชเซเชทเชพ เชคเชชเชพเชธเซ เชเซ เชเซเชฎ เชเซ เชคเซเชจเชพ เชธเซเชคเชฐเซ เช
เชจเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซเชจเซ - เชถเซเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชเซ, เชเช เชธเซเชเชจเชพเช เชเชชเชฏเซเชเชฎเชพเช เชเซ, เชเชฏเชพ เชตเซเชฒเซเชฏเซเชฎเซ เชฎเชพเชเชจเซเช เชฅเชฏเซเชฒ เชเซ. , เชเชพเชฒเซ เชชเชพเชธเชตเชฐเซเชกเชจเซ เชนเชพเชเชฐเซ, เชตเชเซเชฐเซ. เชฆเชพ.เชค. เชเซเชฏเชพเชฐเซ เชเซเชเชจเซ เชธเชเชเซเชฏเชพ เชฌเชนเซ เชฎเซเชเซ เชจเชฅเซ เช
เชจเซ เชคเซ เชเซเชเชฒเชพเช เชชเซเชคเชพเชจเชพ เชเซเช เช
เชจเซ เชญเชฒเชพเชฎเชฃเซ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ
เชเซเชฐเซเชตเซ
เช เชเชชเชฏเซเชเชฟเชคเชพเชจเซ เชนเซเชคเซ เชฌเซ เชชเซเชฐเชเชพเชฐเชจเซ เชจเชฌเชณเชพเชเช เชถเซเชงเชตเชพเชจเซ เชเซ - OS เชฌเชฟเชฒเซเชก เชธเชฎเชธเซเชฏเชพเช (Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu เชธเชฎเชฐเซเชฅเชฟเชค เชเซ) เช เชจเซ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชธเชฎเชธเซเชฏเชพเช (Gemfile.lock, Pipfile.lock, composer.lock, เชชเซเชเซเช-เชฒเซเช) .json , yarn.lock, Cargo.lock). เชเซเชฐเชพเชเชตเซ เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเชเชจเซ เชเชฎเซเช เช เชจเซ เชฒเซเชเชฒ เชเชฎเซเช เชฌเชเชจเซเชจเซ เชธเซเชเซเชจ เชเชฐเซ เชถเชเซ เชเซ เช เชจเซ เชกเซเชเชฐ เชเชฎเซเช เชธเชพเชฅเซ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเซเชฒ .tar เชซเชพเชเชฒเชจเชพ เชเชงเชพเชฐเซ เชชเชฃ เชธเซเชเซเชจ เชเชฐเซ เชถเชเซ เชเซ.
เชเชชเชฏเซเชเชฟเชคเชพเช เช เชฎเชฒเซเชเชฐเชฃ เชตเชฟเชเชฒเซเชชเซ
เชตเชฐเซเชฃเชตเซเชฒ เชเชชเซเชฒเชฟเชเซเชถเชจเซเชจเซ เช เชฒเช-เช เชฒเช เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชเชฎเชพเช เช เชเชฎเชพเชตเชตเชพ เชฎเชพเชเซ, เชนเซเช เชธเชฐเชณ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเชพ เชญเชพเช เชฐเซเชชเซ เชคเชฎเชพเชฎ เชเชชเชฏเซเชเชฟเชคเชพเชเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชธเซเชเชจเชพเช เชชเซเชฐเชฆเชพเชจ เชเชฐเซเชถ.
เชฎเซเชเซเชฏ เชตเชฟเชเชพเชฐ เช เชฆเชฐเซเชถเชพเชตเชตเชพเชจเซ เชเซ เชเซ เชคเชฎเซ เชตเชฟเชเชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชฌเชจเชพเชตเซเชฒ เชกเซเชเชฐเชซเชพเชเชฒเซเชธ เช เชจเซ เชกเซเชเชฐ เชเชฌเซเช เชฎเชพเชเซ เชธเซเชตเชเชพเชฒเชฟเชค เชธเชพเชฎเชเซเชฐเซ เชคเชชเชพเชธเชจเซ เชเซเชตเซ เชฐเซเชคเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชถเชเซ เชเซ.
เชเชเชพเชธเชฃเซ เชชเซเชคเซ เชจเซเชเซเชจเชพ เชชเชเชฒเชพเชเช เชธเชฎเชพเชตเซ เชเซ:
- เชฒเชฟเชจเชเชฐ เชเชชเชฏเซเชเชฟเชคเชพ เชธเชพเชฅเซ เชกเซเชเชฐเชซเชพเชเชฒ เชธเซเชเชจเชพเชเชจเซ เชถเซเชฆเซเชงเชคเชพ เช เชจเซ เชธเชฒเชพเชฎเชคเซ เชคเชชเชพเชธเชตเซ เชนเซเชกเซเชฒเชฟเชจเซเช
- เช เชเชคเชฟเชฎ เช เชจเซ เชฎเชงเซเชฏเชตเชฐเซเชคเซ เชเชฌเซเชเชจเซ เชถเซเชฆเซเชงเชคเชพ เช เชจเซ เชธเซเชฐเชเซเชทเชพ เชคเชชเชพเชธเชตเซ - เชเช เชเชชเชฏเซเชเชฟเชคเชพ เชกเซเชเชฒ
- เชฌเซเช เชเชฎเซเชเชฎเชพเช เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเชพเชฃเซเชคเซ เชจเชฌเชณเชพเชเช (CVE) เช เชจเซ เชธเชเชเซเชฏเชพเชฌเชเชง เช เชตเชฒเชเชฌเชจ เชฎเชพเชเซ เชคเชชเชพเชธเซ เชฐเชนเซเชฏเซเช เชเซ - เชเชชเชฏเซเชเชฟเชคเชพ เชฆเซเชตเชพเชฐเชพ เชเซเชฐเซเชตเซ
เชฒเซเชเชฎเชพเช เชชเชพเชเชณเชฅเซ เชนเซเช เช เชชเชเชฒเชพเชเชจเซ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพ เชฎเชพเชเซ เชคเซเชฐเชฃ เชตเชฟเชเชฒเซเชชเซ เชเชชเซเชถ:
เชชเชนเซเชฒเซเช เชเซ เชเชฟเชเชฒเซเชฌเชจเชพ เชเชฆเชพเชนเชฐเชฃเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ CI/CD เชชเชพเชเชชเชฒเชพเชเชจเชจเซ เชเซเช เชตเซเชจเซ (เชเซเชธเซเช เชเชจเซเชธเซเชเชจเซเชธ เชตเชงเชพเชฐเชตเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเชพ เชตเชฐเซเชฃเชจ เชธเชพเชฅเซ).
เชฌเซเชเซเช เชถเซเชฒ เชธเซเชเซเชฐเชฟเชชเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ.
เชคเซเชฐเซเชเซเช เชกเซเชเชฐ เชเชฎเซเชเชจเซ เชธเซเชเซเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เชกเซเชเชฐ เชเชฎเซเช เชฌเชจเชพเชตเชตเชพเชจเซเช เชเซ.
เชคเชฎเซ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชธเซเชฅเซ เช
เชจเซเชเซเชณ เชนเซเชฏ เชคเซ เชตเชฟเชเชฒเซเชช เชชเชธเชเชฆ เชเชฐเซ เชถเชเซ เชเซ, เชคเซเชจเซ เชคเชฎเชพเชฐเชพ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐเชฎเชพเช เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเซ เชถเชเซ เชเซ เช
เชจเซ เชคเซเชจเซ เชคเชฎเชพเชฐเซ เชเชฐเซเชฐเชฟเชฏเชพเชคเซ เช
เชจเซเชธเชพเชฐ เชธเซเชตเซเชเชพเชฐเซ เชถเชเซ เชเซ.
เชฌเชงเซ เชเชฐเซเชฐเซ เชซเชพเชเชฒเซ เช
เชจเซ เชตเชงเชพเชฐเชพเชจเซ เชธเซเชเชจเชพเช เชชเชฃ เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเช เชเซ:
GitLab CI/CD เชเชเซเชเชฐเชฃ
เชชเซเชฐเชฅเชฎ เชตเชฟเชเชฒเซเชชเชฎเชพเช, เช เชฎเซ เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ GitLab เชฐเชฟเชชเซเชเซเชเชฐเซ เชธเชฟเชธเซเชเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเซเชฐเชเซเชทเชพ เชคเชชเชพเชธเซ เชเซเชตเซ เชฐเซเชคเซ เชฒเชพเชเซ เชเชฐเซ เชถเชเชพเชฏ เชคเซ เชเซเชเชถเซเช. เช เชนเซเช เชเชชเชฃเซ เชชเชเชฒเชพเชเชเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชเชถเซเช เช เชจเซ เชเซเชเชถเซเช เชเซ เชเซเชตเซ เชฐเซเชคเซ เชถเชฐเซเชเชคเชฅเซ เชเชฟเชเชฒเซเชฌ เชธเชพเชฅเซ เชเซเชธเซเช เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซเชจเซเช เชธเซเช เชเชฐเชตเซเช, เชธเซเชเซเชจ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเซเชตเซ เชฐเซเชคเซ เชฌเชจเชพเชตเชตเซ เช เชจเซ เชเซเชธเซเช เชกเซเชเชฐเชซเชพเชเชฒ เช เชจเซ เชฐเซเชจเซเชกเชฎ เชเชฎเซเช - เชเซเชฏเซเชธเชถเซเชช เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเชเชพเชธเชตเชพ เชฎเชพเชเซ เชเชชเชฏเซเชเชฟเชคเชพเช เชเชฒเชพเชตเชตเซ.
GitLab เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ
1. เชกเซเชเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ:
sudo apt-get update && sudo apt-get install docker.io
2. เชตเชฐเซเชคเชฎเชพเชจ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชกเซเชเชฐ เชเซเชฅเชฎเชพเช เชเชฎเซเชฐเซ เชเซเชฅเซ เชเชฐเซเชจเซ เชคเชฎเซ sudo เชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเชพ เชตเชฟเชจเชพ เชกเซเชเชฐ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชถเชเซ:
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. เชนเชตเซ เชเชชเชฃเซ เชเชฟเชเชฒเซเชฌ เชฐเชจเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ: เชเช เชเชเชจเซเช เชเซ เชเซ เชตเชฟเชจเชเชคเซ เชชเชฐ เชคเชฎเชพเชฎ เชเชฐเซเชฐเซ เชเชพเชฎเชเซเชฐเซเช เชเชฒเชพเชตเชถเซ.
เชจเชตเซเชจเชคเชฎ เชธเชเชธเซเชเชฐเชฃ เชกเชพเชเชจเชฒเซเชก เชเชฐเซ (เช เชเชฟเชธเซเชธเชพเชฎเชพเช, Linux 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. เชนเชตเซ เช
เชฎเซ เชฐเชจเชฐเชจเซ เชฐเชเซเชธเซเชเชฐ เชเชฐเซเช เชเซเช เชเซเชฅเซ เชคเซ เช
เชฎเชพเชฐเชพ เชเชฟเชเชฒเซเชฌ เชเชจเซเชธเซเชเชจเซเชธ เชธเชพเชฅเซ เชธเชเชชเชฐเซเช เชเชฐเซ เชถเชเซ.
เช เชเชฐเชตเชพ เชฎเชพเชเซ, 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 เชซเชพเชเชฒเชฎเชพเช เชเชชเชฏเซเชเชฟเชคเชพเช เชฎเชพเชเซ เชเชจเชชเซเช เชชเชฐเชฟเชฎเชพเชฃเซ เชฌเชฆเชฒเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ)
NB: เชเซเชฐเซเชตเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ RPM ะธ เชเชฟเช. เชจเชนเชฟเชเชคเชฐ, เชคเซ RedHat-เชเชงเชพเชฐเชฟเชค เชเชฎเซเชเซเชจเซ เชธเซเชเซเชจ เชเชฐเชคเซ เชตเชเชคเซ เช เชจเซ เชจเชฌเชณเชพเช เชกเซเชเชพเชฌเซเชเชฎเชพเช เช เชชเชกเซเช เชฎเซเชณเชตเชคเซ เชตเชเชคเซ เชญเซเชฒเซ เชชเซเชฆเชพ เชเชฐเชถเซ.
2. เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเช เชซเชพเชเชฒเซ เชเชฎเซเชฐเซเชฏเชพ เชชเชเซ, เช เชฎเชพเชฐเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒเชฎเชพเชเชจเซ เชธเซเชเชจเชพเช เช เชจเซเชธเชพเชฐ, GitLab เชเชชเซเชเชช เชฌเชฟเชฒเซเชก เช เชจเซ เชธเซเชเซเชจ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชถเชฐเซ เชเชฐเชถเซ. CI / CD โ เชชเชพเชเชชเชฒเชพเชเชจเซเชธ เชเซเชฌ เชชเชฐ, เชคเชฎเซ เชธเซเชเชจเชพเชเชจเซ เชชเซเชฐเชเชคเชฟ เชเซเช เชถเชเซ เชเซ.
เชชเชฐเชฟเชฃเชพเชฎเซ, เช
เชฎเชพเชฐเซ เชชเชพเชธเซ เชเชพเชฐ เชเชพเชฐเซเชฏเซ เชเซ. เชคเซเชฎเชพเชเชฅเซ เชคเซเชฐเชฃ เชธเซเชงเชพ เชธเซเชเซเชจเชฟเชเชเชฎเชพเช เชธเชพเชฎเซเชฒ เชเซ, เช
เชจเซ เชเซเชฒเซเชฒเซ (เชฐเชฟเชชเซเชฐเซเช) เชธเซเชเซเชจ เชชเชฐเชฟเชฃเชพเชฎเซ เชธเชพเชฅเซ เชตเชฟเชเชฐเชพเชฏเซเชฒเซ เชซเชพเชเชฒเซเชฎเชพเชเชฅเซ เชเช เชธเชฐเชณ เชฐเชฟเชชเซเชฐเซเช เชเชเชคเซเชฐเชฟเชค เชเชฐเซ เชเซ.
เชกเชฟเชซเซเชฒเซเช เชฐเซเชชเซ, เชเซ เชเซเชฐเชฟเชเซเชเชฒ เชจเชฌเชณเชพเชเช เชเชฎเซเช เช
เชฅเชตเชพ เชกเชฟเชชเซเชจเซเชกเชจเซเชธเซเชฎเชพเช เชเซเชตเชพ เชฎเชณเซ เชคเซ เชเซเชฐเซเชตเซ เชคเซเชจเชพ เช
เชฎเชฒเชจเซ เช
เชเชเชพเชตเซ เชเซ. เชคเซ เช เชธเชฎเชฏเซ, เชนเซเชกเซเชฒเชฟเชจเซเช เชนเชเชฎเซเชถเชพ เชเชเซเชเซเชเซเชฏเซเชถเชจ เชเซเชกเชฎเชพเช เชธเชซเชณเชคเชพ เชชเชฐเชค เชเชฐเซ เชเซ, เชเชพเชฐเชฃ เชเซ เชคเซเชจเชพ เช
เชฎเชฒเชฎเชพเช เชนเชเชฎเซเชถเชพ เชเชฟเชชเซเชชเชฃเซเช เชนเซเชฏ เชเซ, เชเซเชจเชพ เชเชพเชฐเชฃเซ เชฌเชฟเชฒเซเชก เชฌเชเชง เชฅเชพเชฏ เชเซ.
เชคเชฎเชพเชฐเซ เชเซเชเซเชเชธ เชเชตเชถเซเชฏเชเชคเชพเชเชจเซ เชเชงเชพเชฐเซ, เชคเชฎเซ เชเชเซเชเชฟเช เชเซเชกเชจเซ เชเซเช เชตเซ เชถเชเซ เชเซ เชเซเชฅเซ เชเชฐเซเชจเซ เชเซเชฏเชพเชฐเซ เชเซเชเซเชเชธ เชเชเชฟเชฒเชคเชพเชจเซ เชธเชฎเชธเซเชฏเชพเช เชฎเชณเซ เชเชตเซ เชคเซเชฏเชพเชฐเซ เช เชเชชเชฏเซเชเชฟเชคเชพเช เชฌเชฟเชฒเซเชก เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชชเชฃ เชฐเซเชเซ. เช
เชฎเชพเชฐเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เชฌเชฟเชฒเซเชก เชซเชเซเชค เชคเซเชฏเชพเชฐเซ เช เชฌเชเชง เชฅเชถเซ เชเซ เชเซเชฐเชฟเชตเซ เชเชเชญเซเชฐเชคเชพ เชธเชพเชฅเซ เชจเชฌเชณเชพเช เชถเซเชงเซ เชเซ เช
เชฎเซ เชถเซเชธเซเชเซเชชเชฐ เชตเซเชฐเซเชเชฌเชฒเชฎเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชเชฐเซ เชเซ. .gitlab-ci.yml.
เชฆเชฐเซเช เชฏเซเชเชฟเชฒเชฟเชเซเชจเชพ เชเชชเชฐเซเชถเชจเชจเซเช เชชเชฐเชฟเชฃเชพเชฎ เชฆเชฐเซเช เชธเซเชเซเชจเชฟเชเช เชเชพเชฐเซเชฏเชจเชพ เชฒเซเชเชฎเชพเช เชเซเช เชถเชเชพเชฏ เชเซ, เชเชฐเซเชเชฟเชซเซเชเซเช เชตเชฟเชญเชพเชเชฎเชพเช เชธเซเชงเชพ เช json เชซเชพเชเชฒเซเชฎเชพเช เช
เชฅเชตเชพ เชธเชพเชฆเชพ HTML เชฐเชฟเชชเซเชฐเซเชเชฎเชพเช เชเซเช เชถเชเชพเชฏ เชเซ (เชจเซเชเซ เชคเซเชจเชพ เชชเชฐ เชตเชงเซ):
3. เชเชชเชฏเซเชเชฟเชคเชพ เช
เชนเซเชตเชพเชฒเซเชจเซ เชฅเซเชกเชพ เชตเชงเซ เชฎเชพเชจเชต-เชตเชพเชเชเซ เชถเชเชพเชฏ เชคเซเชตเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชฐเชเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เชเช เชจเชพเชจเซ เชชเชพเชฏเชฅเซเชจ เชธเซเชเซเชฐเชฟเชชเซเชเชจเซ เชเชชเชฏเซเช เชคเซเชฐเชฃ json เชซเชพเชเชฒเซเชจเซ เชเช HTML เชซเชพเชเชฒเชฎเชพเช เชเชพเชฎเซเชเชจเชพ เชเซเชทเซเชเช เชธเชพเชฅเซ เชฐเซเชชเชพเชเชคเชฐเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชฅเชพเชฏ เชเซ.
เช เชธเซเชเซเชฐเชฟเชชเซเช เชเช เช
เชฒเช เชฐเชฟเชชเซเชฐเซเช เชเชพเชธเซเช เชฆเซเชตเชพเชฐเชพ เชฒเซเชจเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช
เชจเซ เชคเซเชจเซ เช
เชเชคเชฟเชฎ เชเชฐเซเชเชฟเชซเซเชเซเช เชฐเชฟเชชเซเชฐเซเช เชธเชพเชฅเซเชจเซ HTML เชซเชพเชเชฒ เชเซ. เชธเซเชเซเชฐเชฟเชชเซเช เชธเซเชคเซเชฐเซเชค เชชเชฃ เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเช เชเซ เช
เชจเซ เชคเชฎเชพเชฐเซ เชเชฐเซเชฐเชฟเชฏเชพเชคเซ, เชฐเชเชเซ เชตเชเซเชฐเซเชจเซ เช
เชจเซเชเซเชฒเชฟเชค เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชถเซเชฒ เชธเซเชเซเชฐเชฟเชชเซเช
เชฌเซเชเซ เชตเชฟเชเชฒเซเชช เชเชตเชพ เชเชฟเชธเซเชธเชพเช เชฎเชพเชเซ เชฏเซเชเซเชฏ เชเซ เชเซ เชเซเชฏเชพเช เชคเชฎเชพเชฐเซ CI/CD เชธเชฟเชธเซเชเชฎเชฎเชพเช เชจ เชนเซเชฏ เชคเซเชตเซ เชกเซเชเชฐ เชเชฎเซเชเซ เชคเชชเชพเชธเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เช เชฅเชตเชพ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ เชซเซเชฐเซเชฎเชฎเชพเช เชฌเชงเซ เชธเซเชเชจเชพเช เชนเซเชตเซ เชเชฐเซเชฐเซ เชเซ เชเซ เชเซ เชธเซเชงเชพ เช เชนเซเชธเซเช เชชเชฐ เชเชเซเชเชฟเชเซเชฏเซเช เชฅเช เชถเชเซ. เช เชตเชฟเชเชฒเซเชช เชคเซเชฏเชพเชฐ เชถเซเชฒ เชธเซเชเซเชฐเชฟเชชเซเช เชฆเซเชตเชพเชฐเชพ เชเชตเชฐเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชเซ เชเซ เชธเซเชตเชเซเช เชตเชฐเซเชเซเชฏเซเช เชฒ (เช เชฅเชตเชพ เชตเชพเชธเซเชคเชตเชฟเช) เชฎเชถเซเชจ เชชเชฐ เชชเชฃ เชเชฒเชพเชตเซ เชถเชเชพเชฏ เชเซ. เชธเซเชเซเชฐเชฟเชชเซเช เชเชชเชฐ เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐ เชเซเชตเซ เช เชธเซเชเชจเชพเชเชจเซ เช เชจเซเชธเชฐเซ เชเซ.
เชธเซเชเซเชฐเชฟเชชเซเช เชธเชซเชณเชคเชพเชชเซเชฐเซเชตเช เชเชพเชฎ เชเชฐเซ เชคเซ เชฎเชพเชเซ, เชกเซเชเชฐ เชธเชฟเชธเซเชเชฎ เชชเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฒเซเช เชนเซเชตเซเช เชเซเชเช เช เชจเซ เชตเชฐเซเชคเชฎเชพเชจ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชกเซเชเชฐ เชเซเชฅเชฎเชพเช เชนเซเชตเซ เชเซเชเช.
เชธเซเชเซเชฐเชฟเชชเซเช เชชเซเชคเซ เช
เชนเซเช เชฎเชณเซ เชถเชเซ เชเซ:
เชซเชพเชเชฒเชจเซ เชถเชฐเซเชเชคเชฎเชพเช, เชตเซเชฐเซเชเชฌเชฒเซเชธ เชธเซเชชเชทเซเช เชเชฐเซ เชเซ เชเซ เชเช เชเชฎเซเช เชธเซเชเซเชจ เชเชฐเชตเซ เชเซเชเช เช เชจเซ เชเชพเชฎเซเชจเซ เชเช เชเชเชญเซเชฐเชคเชพเชจเซ เชฒเซเชงเซ เชเซเชฐเชพเชเชตเซ เชฏเซเชเชฟเชฒเชฟเชเซ เชธเซเชชเชทเซเช เชญเซเชฒ เชเซเชก เชธเชพเชฅเซ เชฌเชนเชพเชฐ เชจเซเชเชณเซ เชเชถเซ.
เชธเซเชเซเชฐเชฟเชชเซเช เชเชเซเชเซเชเซเชฏเซเชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชคเชฎเชพเชฎ เชเชชเชฏเซเชเชฟเชคเชพเชเชจเซ เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช เชกเชพเชเชจเชฒเซเชก เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ เชกเซเชเชฐ_เชเซเชฒเซเชธ, เชคเซเชฎเชจเชพ เชเชพเชฐเซเชฏเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ - เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช 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