Hey Habr!
เปเบโเบเบงเบฒเบกโเปเบเบฑเบโเบเบดเบโเบเบตเปโเบเบฑเบโเบชเบฐโเปเบซเบกโ, เปเบเบทเปเบญเบโเบเบฒเบโเบเบฒโเบฅเบฐโเบเบปเบโเบเบฒเบโเบเบฐโเบเบงเบโเบเบฒเบโเบเบฐโเบเบงเบโเบเบฒเบโเบเบฑเบโเบเบฐโเบเบฒโเบเบฒเบโเปเบเบตเปเบกโเบเบถเปเบโ, เบเบฑเบโเบซเบฒโเบเบฒเบโเบฎเบฑเบโเบเบฐโเบเบฑเบโเบเบงเบฒเบกโเบเบญเบโเปเบโเบเบญเบโเบเบฑเปเบโเบเบญเบโเบเปเบฒเบเปโเปเบฅเบฐโเบซเบเปเบงเบโเบเบฒเบโเบเบตเปโเบเปเบฝเบงโเบเปเบญเบโเบเบฑเบโเบเบนเปโเบเบฑเบโเบเบธโเปเบกเปเบโเบเปเปโเปเบกเปเบโเบเบฑเบโเบซเบฒโเบเบตเปโเบชเปเบฒโเบเบฑเบโเบซเบเปเบญเบโ. เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบเบนเปเบกเบทเปเบกเปเบเปเบเปเปเบงเบฅเบฒเบซเบผเบฒเบ, เบชเบฐเบเบฑเปเบเบกเบฑเบเปเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบเบตเบเบตเปเบเบฐเปเบฎเบฑเบเบขเปเบฒเบเบซเบเปเบญเบเบเบฑเปเบเบเบญเบเปเบเบทเปเบญเบเบเบปเปเบเปเบเบทเปเบญเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบฐเบเบงเบเบเบฒเบเบเบตเป.
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเป, เบเปเบญเบเบเบฐเปเบเปเบเบเบฑเบเบชเบฐเบเบดเบเบเบตเปเบเบฝเบกเบเปเบญเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบญเบธเบเบฐเบเบญเบเบเบงเบฒเบกเบเบญเบเปเบ Docker เบซเบผเบฒเบเบญเบฑเบเปเบฅเบฐเบเปเบฒเปเบเบฐเบเปเบฒเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเปเบฒเปเบเปเบเบปเบงเบชเบฐเปเบเบเบเบปเบงเบขเปเบฒเบเบเบฐเบซเบเบฒเบเบเปเบญเบเปเบเบทเปเบญเบเบปเบเบชเบญเบเบเบฐเบเบงเบเบเบฒเบเบเบตเป. เบเปเบฒเบโเบชเบฒโเบกเบฒเบโเบเปเบฒโเปเบเปโเบญเบธโเบเบฐโเบเบญเบโเบเบฒเบโเบเบปเบโเบฅเบญเบโเบเบฒเบโเบเบฑเบโเบเบฑเปเบโเบเบฐโเบเบงเบโเบเบฒเบโเบเบญเบโเบเบฒเบโเบเบปเบโเบชเบญเบโเบเบงเบฒเบกโเบเบญเบโเปเบโเบเบญเบโเบฎเบนเบโเบเบฒเบ Dockerfile เปเบฅเบฐโเบเปเบฒโเปเบเบฐโเบเปเบฒโ. เบกเบฑเบเปเบเบฑเบเบเบตเปเบเบฑเบเปเบเบเบงเปเบฒเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบฅเบฐเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเบธเบเปเบเบปเบเปเบกเปเบเปเบเบเบเปเบฒเบเบเบฑเบ, เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเปเบเปเบญเบเบเบฐเปเบซเปเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบเบฑเบเปเบเปเบเปเบซเบผเบฒเบเบขเปเบฒเบ.
เบเบงเบโเบชเบญเบโเบเบงเบฒเบกโเบเบญเบโเปเบโเบญเบธโเบเบฐโเบเบญเบโ
เบกเบตเบซเบผเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบปเบงเบเปเบงเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเปเบฅเบฐเบชเบฐเบเบดเบเบเบตเปเบเปเบฒเปเบเบตเบเบเบฒเบเบเบงเบเบชเบญเบเบเปเบฒเบเบเปเบฒเบเปเบเบญเบเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบ Docker. เบเบฒเบเบชเปเบงเบเบเบญเบเบเบงเบเปเบเบปเบฒเปเบเปเบเบทเบเบญเบฐเบเบดเบเบฒเบเปเบฅเปเบงเปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเปเบฒเบเบกเบฒ (
เบฎเบฒเปเบเบฅเบดเบ
เบเบฐเปเบซเบเบเบเบญเบเบเบญเบเปเบเบเบเบตเปเบเปเบฒเบเบเบฒเบเบเบตเปเบเปเบงเบ, เปเบเบฑเบเบเบฒเบเบเบฐเบกเบฒเบเบเปเบฒเบญเบดเบ, เบเบฐเปเบกเบตเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเปเบฅเบฐเบเบงเบฒเบกเบเบญเบเปเบเบเบญเบเบเปเบฒเปเบเบฐเบเปเบฒ Dockerfile (เบเบปเบงเบขเปเบฒเบ, เบเบฒเบเบเปเบฒเปเบเปเบเบฝเบเปเบเปเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบเบฎเบนเบเบเบฒเบเบซเบผเบทเบเบฒเบเบเปเบฒเปเบเป sudo).
Dockle
console utility เบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบฎเบนเบเบเบฒเบ (เบซเบผเบทเบเบฑเบ tar archive เบเบญเบเบฎเบนเบเบเบฒเบเปเบเบซเบเบถเปเบ), เปเบเบดเปเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเปเบฅเบฐเบเบงเบฒเบกเบเบญเบเปเบเบเบญเบเบฎเบนเบเบเบฒเบเบชเบฐเปเบเบฒเบฐเปเบเบซเบเบถเปเบเปเบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเบงเบดเปเบเบฒเบฐเบเบฑเปเบเปเบฅเบฐเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบกเบฑเบ - เบเบนเปเปเบเปเบเบตเปเบเบทเบเบชเปเบฒเบเบเบถเปเบ, เบเปเบฒเปเบเบฐเบเปเบฒเปเบเบเบทเบเบเปเบฒเปเบเป, เปเบเบดเปเบ. เบเบฐเบฅเบดเบกเบฒเบเบเบทเบเบเบดเบเบเบฑเปเบ, เบกเบตเบฅเบฐเบซเบฑเบเบเปเบฒเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ, เปเบฅเบฐเบญเบทเปเบเป. d. เบกเบฒเบฎเบญเบเบเบฑเบเบเบธเบเบฑเบเบเปเบฒเบเบงเบเบเบญเบเบเบฒเบเบเบงเบเบชเบญเบเปเบกเปเบเบเปเปเปเบซเบเปเบซเบผเบฒเบเปเบฅเบฐเปเบกเปเบเบญเบตเบเปเบชเปเบเบฒเบเบเบงเบเบชเบญเบเปเบฅเบฐเบเปเบฒเปเบเบฐเบเปเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบญเบเบเปเบฒเบเบงเบเบซเบเบถเปเบ.
เปเบฅเบฑเบเปเบเปเบญเบเป
เบเบปเบเบเบฐเปเบซเบเบเบเบตเปเบกเบตเบเบธเบเบเบฐเบชเบปเบเปเบเบทเปเบญเบเบญเบเบซเบฒเบชเบญเบเบเบฐเปเบเบเบเบญเบเบเปเบญเบเปเบซเบงเป - เบเบฑเบเบซเบฒเบเบฑเบเบเบฒเบเบเปเปเบชเปเบฒเบ OS (เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเปเบเบ Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) เปเบฅเบฐเบเบฑเบเบซเบฒเบเบฑเบ dependencies (Gemfile.lock, Pipfile.lock, composer.lock, package -lock.json , yarn.lock, cargo.lock). Trivy เบชเบฒเบกเบฒเบเบชเบฐเปเบเบเปเบเปเบเบฑเบเบฎเบนเบเบเบฒเบเปเบ repository เปเบฅเบฐเบฎเบนเบเบเบฒเบเบเปเบญเบเบเบดเปเบ, เปเบฅเบฐเบเบฑเบเบชเบฒเบกเบฒเบเบชเบฐเปเบเบเปเบเบเบญเบตเบเปเบชเปเปเบเบฅเป .tar เบเบตเปเปเบญเบเบเปเบงเบเบฎเบนเบเบเบฒเบ Docker.
เบเบฒเบโเปเบฅเบทเบญเบโเปเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบญเบธโเบเบฐโเบเบญเบโ
เปเบเบทเปเบญเบเบปเบเบฅเบญเบเปเบเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเปเบงเปเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเปเบเบเบเปเบฝเบง, เบเปเบญเบเบเบฐเปเบซเปเบเปเบฒเปเบเบฐเบเปเบฒเปเบเบเบฒเบเบเบดเบเบเบฑเปเบเบญเบธเบเบฐเบเบญเบเบเบฑเบเบซเบกเบปเบเปเบเบเบฐเบเบงเบเบเบฒเบเบเบตเปเบเปเบฒเบเบเบฒเบเบเบฒเบเบขเปเบฒเบ.
เปเบเบงเบเบงเบฒเบกเบเบดเบเบเบปเปเบเบเปเปเบกเปเบเปเบเบทเปเบญเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเบดเบเบตเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเปเบเบทเปเบญเบซเบฒเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบญเบ Dockerfiles เปเบฅเบฐเบฎเบนเบเบเบฒเบ Docker เบเบตเปเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒ.
เบเบฒเบเบเบงเบเบชเบญเบเบเบปเบงเบกเบฑเบเปเบญเบเบเบฐเบเบญเบเบเปเบงเบเบเบฑเปเบเบเบญเบเบเปเปเปเบเบเบตเป:
- เบเบฒเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเปเบฅเบฐเบเบงเบฒเบกเบเบญเบเปเบเบเบญเบเบเปเบฒเปเบเบฐเบเปเบฒ Dockerfile เปเบเบเปเบเป linter utility เบฎเบฒเปเบเบฅเบดเบ
- เบเบฒเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเปเบฅเบฐเบเบงเบฒเบกเบเบญเบเปเบเบเบญเบเบฎเบนเบเบเบฒเบเบชเบธเบเบเปเบฒเบเปเบฅเบฐเบฅเบฐเบเบฑเบเบเบฒเบเปเบเบเปเบเปเบเบฐเปเบซเบเบ Dockle
- เบเบฒเบเบเบงเบเบชเบญเบเบเบฒเบเบเบฐเบเบปเบเบเบปเบงเบเบญเบเบเปเบญเบเปเบซเบงเปเบเบตเปเบฎเบนเปเบเบฑเบเปเบเบเบชเบฒเบเบฒเบฅเบฐเบเบฐ (CVE) เปเบเบฎเบนเบเบเบฒเบเบเบทเปเบเบเบฒเบ เปเบฅเบฐเบเปเบฒเบเบงเบเบเบญเบเบเบฒเบเปเบเบดเปเบเบเบฒเบญเบฒเปเบช - เบเบฒเบเบเปเบฒเปเบเปเบเบฐเปเบซเบเบ เปเบฅเบฑเบเปเบเปเบญเบเป
เบเปเปเบกเบฒเปเบเบเบปเบเบเบงเบฒเบกเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบซเปเบชเบฒเบกเบเบฒเบเปเบฅเบทเบญเบเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฑเปเบเบเบญเบเปเบซเบผเบปเปเบฒเบเบตเป:
เบเปเบฒเบญเบดเบเปเบกเปเบเปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเปเป CI / CD เปเบเบเปเบเป GitLab เปเบเบฑเบเบเบปเบงเบขเปเบฒเบ (เบกเบตเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเปเบฝเบงเบเบฑเบเบเบฐเบเบงเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบเบเบฒเบเบเบปเบเบชเบญเบ).
เบญเบฑเบเบเบตเบชเบญเบเปเบกเปเบเบเบฒเบเปเบเป Shell script.
เบญเบฑเบเบเบตเบชเบฒเบกเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบชเปเบฒเบเบฎเบนเบเบเบฒเบ Docker เปเบเบทเปเบญเบชเบฐเปเบเบเบฎเบนเบเบเบฒเบ Docker.
เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบทเบญเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบเปเบเบปเปเบฒเบเบตเปเบชเบธเบ, เปเบญเบเบกเบฑเบเปเบเบชเบนเปเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบเบเปเบฒเบเปเบฅเบฐเบเบฑเบเบกเบฑเบเปเบซเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบญเบเบเปเบฒเบ.
เปเบเบฅเปเบเบตเปเบเปเบฒเปเบเบฑเบเบเบฑเบเปเบปเบ เปเบฅเบฐเบเปเบฒเปเบเบฐเบเปเบฒเปเบเบตเปเบกเปเบเบตเบกเบเบฑเบเบขเบนเปเปเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบ:
เบเบฒเบเปเบเบทเปเบญเบกเปเบเบเปเบเบปเปเบฒเปเบ GitLab CI/CD
เปเบเบเบฒเบเปเบฅเบทเบญเบเบเปเบฒเบญเบดเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบดเปเบเบงเบดเบเบตเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบญเบเปเบเปเบเบเปเบเปเบฅเบฐเบเบปเบเปเบเบฑเบเบฎเบฑเบเบชเบฒ GitLab เปเบเบฑเบเบเบปเบงเบขเปเบฒเบ. เบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบเบเบเปเบฒเบเบเบฑเปเบเบเบญเบเปเบฅเบฐเบเบดเบเบญเบญเบเบงเบดเบเบตเบเบฒเบเบเบดเบเบเบฑเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฒเบเบเบปเบเบชเบญเบเบเบฑเบ GitLab เบเบฒเบ scratch, เบชเปเบฒเบเบเบฐเบเบงเบเบเบฒเบเบชเบฐเปเบเบเปเบฅเบฐเปเบเบตเบเบเบปเบง utilities เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบงเบเบชเบญเบ Dockerfile เบเบฒเบเบเบปเบเบชเบญเบเปเบฅเบฐเบฎเบนเบเบเบฒเบเบชเบธเปเบก - เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ JuiceShop .
เบเบฒเบเบเบดเบเบเบฑเปเบ GitLab
1. เบเบดเบเบเบฑเปเบ Docker:
sudo apt-get update && sudo apt-get install docker.io
2. เปเบเบตเปเบกเบเบนเปเปเบเปเบเบฐเบเบธเบเบฑเบเปเบเบปเปเบฒเปเบเบเบธเปเบก docker เปเบเบทเปเบญเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ docker เปเบเบเบเปเปเบเปเบญเบเปเบเป sudo:
sudo addgroup <username> docker
3. เบเบญเบเบซเบฒ IP เบเบญเบเบเปเบฒเบ:
ip addr
4. เบเบดเบเบเบฑเปเบ เปเบฅเบฐเปเบเบตเบ GitLab เปเบเบเปเบญเบเบเบฑเบเบเบธ, เปเบเบเบเบตเปเบเบตเปเบขเบนเป 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-test เปเบฅเบฐเปเบฅเบตเปเบกเบเบปเปเบเบกเบฑเบเบเปเบงเบเปเบเบฅเปเปเบฅเบตเปเบกเบเบปเปเบ README.md:
7. เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบดเบเบเบฑเปเบ GitLab Runner: เบเบปเบงเปเบเบเบเบตเปเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบตเปเบเปเบฒเปเบเบฑเบเบเบฒเบกเบเปเบฒเบฎเปเบญเบเบเป.
เบเบฒเบงเปเบซเบฅเบเปเบงเบตเบเบฑเบเบซเบผเปเบฒเบชเบธเบ (เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบชเปเบฒเบฅเบฑเบ Linux 64-bit):
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 เบชเปเบฒเบฅเบฑเบ Runner เปเบฅเบฐเปเบฅเบตเปเบกเบเบฒเบเบเปเบฅเบดเบเบฒเบ:
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. เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบฅเบปเบเบเบฐเบเบฝเบ Runner เปเบเบทเปเบญเปเบซเปเบกเบฑเบเบชเบฒเบกเบฒเบเบเบปเบงเบเบฑเบเบเบฑเบเบเบปเบงเบขเปเบฒเบ GitLab เบเบญเบเบเบงเบเปเบฎเบปเบฒ.
เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เปเบเบตเบเบซเบเปเบฒ Settings-CI/CD (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) เปเบฅเบฐเปเบเปเบเบ Runners เบเบญเบเบซเบฒ URL เปเบฅเบฐ token เบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบ:
11. เบฅเบปเบเบเบฐเบเบฝเบ Runner เปเบเบเบเบฒเบเบเปเบฝเบเปเบเบ URL เปเบฅเบฐ Registration token:
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 เบเบตเปเบเบฝเบกเบเปเบญเบกเบเบตเปเปเบฎเบฑเบเบงเบฝเบ, เปเบเบดเปเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบตเปเบกเบเปเบฒเปเบเบฐเบเปเบฒเปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบเปเบฒเปเบเปเบเบฐเปเบซเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ. เปเบเบเบปเบงเบขเปเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเปเบกเบตเบเบฑเปเบเบเบญเบเปเบเบเบฒเบเบชเปเบฒเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบฅเบฐเบเบฑเบเบเบธเบกเบฑเบ, เปเบเปเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเปเบเปเบเบดเบเบชเบดเปเบเปเบซเบผเบปเปเบฒเบเบตเปเบเบฐเบเปเบฒเบซเบเปเบฒเบเบฑเปเบเบเบญเบเบเบฒเบเบชเบฐเปเบเบเปเบฅเบฐเบชเปเบฒเบเบฎเบนเบเบเบฒเบเปเบฅเบฐ Dockerfile เบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐ.
เบเบฒเบโเบเบฑเปเบโเบเปเบฒโเบเปเปโ
1. เปเบเบตเปเบกเปเบเบฅเปเปเบชเปเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบ mydockerfile.df (เบเบตเปเปเบกเปเบ Dockerfile เบเบปเบเบชเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบงเบเบชเบญเบ) เปเบฅเบฐเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฐเบเบงเบเบเบฒเบ GitLab CI/CD .gitlab-cicd.yml, เปเบเบดเปเบเบฅเบฒเบเบเบทเปเบเปเบฒเปเบเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบเปเบเบทเปเบญเบเบชเบฐเปเบเบ (เบซเบกเบฒเบเปเบซเบเบเบธเบเปเบเบเบทเปเปเบเบฅเป).
เปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒ YAML เบกเบตเบเปเบฒเปเบเบฐเบเปเบฒเปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบเบชเบฒเบกเบญเบฑเบ (Hadolint, Dockle, เปเบฅเบฐ Trivy) เบเบตเปเบเบฐเบงเบดเปเบเบฒเบฐ Dockerfile เบเบตเปเปเบฅเบทเบญเบเปเบฅเบฐเบฎเบนเบเบเบฒเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบเบเบปเบงเปเบ DOCKERFILE. เปเบเบฅเปเบเบตเปเบเปเบฒเปเบเบฑเบเบเบฑเบเบซเบกเบปเบเบชเบฒเบกเบฒเบเปเบญเบปเบฒเบกเบฒเบเบฒเบ repository:
เบซเบเปเปเบกเบฒเบเบฒเบ 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 archive (เบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบเปเบฒเบเบเบฐเบเปเบญเบเบเปเบฝเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเบชเปเบฒเบฅเบฑเบเบเบปเบเบเบฐเปเบซเบเบเปเบเปเบเบฅเป YAML).
NB: Trivy เบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเบเบดเบเบเบฑเปเบ rpm ะธ เปเบ. เบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบ, เบกเบฑเบเบเบฐเบชเปเบฒเบเบเปเปเบเบดเบเบเบฒเบเปเบเปเบงเบฅเบฒเบเบตเปเบชเบฐเปเบเบเบฎเบนเบเบเบฒเบเบเบตเปเบญเบตเบเปเบชเป RedHat เปเบฅเบฐเปเบเปเบฎเบฑเบเบเบฒเบเบเบฑเบเบเบธเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบเบงเบฒเบกเบชเปเบฝเบ.
2. เบซเบผเบฑเบเบเบฒเบเปเบเบตเปเบกเปเบเบฅเปเปเบชเป repository, เบญเบตเบเบเบฒเบกเบเปเบฒเปเบเบฐเบเปเบฒเปเบเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒ, GitLab เบเบฐเปเบฅเบตเปเบกเบเบปเปเบเบเบฐเบเบงเบเบเบฒเบเบชเปเบฒเบเปเบฅเบฐเบชเบฐเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ. เปเบเปเบเบ CI/CD โ Pipelines เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบเบงเบฒเบกเบเบทเบเบซเบเปเบฒเบเบญเบเบเปเบฒเปเบเบฐเบเปเบฒ.
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบต 4 เบงเบฝเบเบเบฒเบ. เบชเบฒเบกเบเบญเบเบเบงเบเปเบเบปเบฒเบเบฑเบเบเบฒเบเบเบฑเบเบเบฒเบเบชเบฐเปเบเบเปเบเบเบเบปเบ, เปเบฅเบฐเบชเบธเบเบเปเบฒเบ (เบเบปเบเบฅเบฒเบเบเบฒเบ) เบฅเบงเบเบฅเบงเบกเบเบปเบเบฅเบฒเบเบเบฒเบเบเปเบฒเบเปเบเบฒเบเปเบเบฅเปเบเบตเปเบเบฐเปเบเบเบเบฐเบเบฒเบเบเปเบงเบเบเบปเบเปเบเปเบฎเบฑเบเบเบฒเบเบชเบฐเปเบเบ.
เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, Trivy เบขเบธเบเปเบฎเบฑเบเบงเบฝเบเบเปเบฒเบกเบตเบเบธเบเบญเปเบญเบเบเบตเปเปเบเบฑเบเบญเบฑเบเบเบฐเบฅเบฒเบเบเบทเบเบเบงเบเบเบปเบเปเบเบฎเบนเบเบเบฒเบ เบซเบผเบทเบเบฒเบเบเบถเปเบเบเบฑเบ. เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ, Hadolint เบชเบฐเปเบซเบกเบตเบชเบปเปเบเบเบทเบเบฅเบฐเบซเบฑเบเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบเปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบชเบฐเปเบซเบกเบตเบเบปเบเปเบเปเบฎเบฑเบเปเบเบเปเบฒเปเบซเบฑเบ, เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเบเบฒเบเบเปเปเบชเปเบฒเบเบขเบธเบเปเบเบปเบฒ.
เบญเบตเบเบเบฒเบกเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบชเบฐเปเบเบฒเบฐเบเบญเบเบเปเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบเปเบฒเบฅเบฐเบซเบฑเบเบญเบญเบเปเบเบทเปเบญเบงเปเบฒเปเบกเบทเปเบญเบชเบดเปเบเบญเปเบฒเบเบงเบเบเบงเบฒเบกเบชเบฐเบเบงเบเปเบซเบผเบปเปเบฒเบเบตเปเบเบงเบเบเบปเบเบเบฑเบเบซเบฒเบเบญเบเบเบงเบฒเบกเบชเปเบฒเบเบฑเบเบเบตเปเปเบเปเบเบญเบ, เบเบงเบเปเบเบปเบฒเบเปเปเบขเบธเบเบเบฐเบเบงเบเบเบฒเบเบชเปเบฒเบ. เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบฒเบเบเปเปเบชเปเบฒเบเบเบฐเบขเบธเบเปเบเบปเบฒเบเบฝเบเปเบเปเบเปเบฒ Trivy เบเบงเบเบเบปเบเบเปเบญเบเปเบซเบงเปเบเบฑเบเบเบงเบฒเบกเบชเปเบฒเบเบฑเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบฅเบฐเบเบธเปเบงเปเปเบเบเบปเบงเปเบ SHOWSTOPPER เปเบ .gitlab-ci.yml.
เบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเปเบเปเบฅเบฐเบเบปเบเบเบฐเปเบซเบเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเปเบเปเปเบเบเบฑเบเบเบถเบเบเบญเบเปเบเปเบฅเบฐเบงเบฝเบเบเบฒเบเบเบฒเบเบชเบฐเปเบเบ, เปเบเบเบเบปเบเปเบเปเบเบฅเป json เปเบเบชเปเบงเบ artifacts, เบซเบผเบทเปเบเบเบปเบเบฅเบฒเบเบเบฒเบ HTML เปเบเบเบเปเบฒเบเบเบฒเบ (เปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบงเปเบฒเบเปเบฒเบเบฅเบธเปเบกเบเบตเป):
3. เปเบเบทเปเบญเบเปเบฒเบชเบฐเปเบซเบเบตเบเบปเบเบฅเบฒเบเบเบฒเบเบเบปเบเบเบฐเปเบซเบเบเปเบเบฎเบนเบเปเบเบเบเบตเปเบกเบฐเบเบธเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเปเปเบฅเบฑเบเบเปเบญเบ, script Python เบเบฐเบซเบเบฒเบเบเปเบญเบเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเปเบฝเบเบชเบฒเบกเปเบเบฅเป JSON เปเบเบปเปเบฒเปเบเปเบเปเบเบฅเป HTML เบเบตเปเบกเบตเบเบฒเบเบฐเบฅเบฒเบเบเปเปเบเบปเบเบเปเบญเบ.
เบชเบฐเบเบฃเบดเบเบเบตเปเบเบทเบเปเบเบตเบเบเบปเบงเปเบเบเบงเบฝเบเบเบฒเบเบฅเบฒเบเบเบฒเบเปเบเบเบเปเบฒเบเบซเบฒเบ, เปเบฅเบฐเบชเบดเปเบเบเบญเบกเบชเบธเบเบเปเบฒเบเบเบญเบเบกเบฑเบเปเบกเปเบเปเบเบฅเป HTML เบเบตเปเบกเบตเบเบปเบเบฅเบฒเบเบเบฒเบ. เปเบซเบผเปเบ script เบเบฑเบเบขเบนเปเปเบ repository เปเบฅเบฐเบชเบฒเบกเบฒเบเบเบฑเบเบเบปเบงเปเบซเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบ, เบชเบต, เปเบฅเบฐเบญเบทเปเบเป.
Shell script
เบเบฒเบเปเบฅเบทเบญเบเบเบตเบชเบญเบเปเบกเปเบเปเบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบเบเปเบฅเบฐเบเบตเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบงเบเปเบเบดเปเบเบฎเบนเบเบเบฒเบ Docker เบขเบนเปเบเบญเบเบฅเบฐเบเบปเบ CI / CD เบซเบผเบทเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบกเบตเบเปเบฒเปเบเบฐเบเปเบฒเบเบฑเบเบซเบกเบปเบเปเบเบฎเบนเบเปเบเบเบเบตเปเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเปเปเบเบเบเบปเบเปเบเปเบเบปเปเบฒเบเบฒเบ. เบเบปเบงเปเบฅเบทเบญเบเบเบตเปเบเบทเบเบเบปเบเบเบธเบกเบเปเบงเบเบชเบฐเบเบดเบเปเบเบฐเบเบตเปเบเบฝเบกเบเปเบญเบกเบเบตเปเบชเบฒเบกเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเปเปเบเปเบเบทเปเบญเบ virtual (เบซเบผเบทเปเบกเปเบเบฐเบเบฑเปเบเบเบดเบ) เบเบตเปเบชเบฐเบญเบฒเบ. script เบเบฐเบเบดเบเบฑเบเบเปเบฒเปเบเบฐเบเปเบฒเบเบฝเบงเบเบฑเบเบเบฑเบ gitlab-runner เบเบตเปเบญเบฐเบเบดเบเบฒเบเบเปเบฒเบเปเบเบดเบ.
เปเบเบทเปเบญเปเบซเปเบชเบฐเบเบฃเบดเบเปเบฎเบฑเบเบงเบฝเบเปเบเปเบชเบณเปเบฅเบฑเบ, Docker เบเปเบญเบเบเบทเบเบเบดเบเบเบฑเปเบเบขเบนเปเปเบเบฅเบฐเบเบปเบ เปเบฅเบฐเบเบนเปเปเบเปเบเบฑเบเบเบธเบเบฑเบเบเปเบญเบเบขเบนเปเปเบเบเบธเปเบก docker.
script เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเบเบตเปเบเบตเป:
เปเบเบเบญเบเบเบปเปเบเบเบญเบเปเบเบฅเป, เบเบปเบงเปเบเบฅเบฐเบเบธเบงเปเบฒเบฎเบนเบเบเบฒเบเปเบเบเปเบญเบเบเบฒเบเบชเบฐเปเบเบ เปเบฅเบฐเบเปเปเบเบปเบเบเปเบญเบเบเปเบฒเบเบงเบดเบเบฒเบเบญเบฑเบเปเบเบเบฐเปเบฎเบฑเบเปเบซเป Trivy utility เบญเบญเบเบเปเบงเบเบฅเบฐเบซเบฑเบเบเปเปเบเบดเบเบเบฒเบเบเบตเปเบฅเบฐเบเบธเปเบงเป.
เปเบโเบฅเบฐโเบซเบงเปเบฒเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบ scriptโ, เบญเบธโเบเบฐโเบเบญเบโเบเบฐโเปเบซเบเบโเบเบฑเบโเบซเบกเบปเบโเบเบฐโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเบฒเบงโเปเบซเบผเบโเปเบโเบฅเบฐโเบเบปเบโ 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
เบฎเบนเบเบเบฒเบ Docker เบเบตเปเบกเบตเบเบปเบเบเบฐเปเบซเบเบเบเบฑเบเบซเบกเบปเบ
เปเบเบฑเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเบชเบฒเบก, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบฅเบงเบเบฅเบงเบกเบชเบญเบ Dockerfiles เบเปเบฒเบเปเปเบเบทเปเบญเบชเปเบฒเบเบฎเบนเบเบเบฒเบเบเบตเปเบกเบตเบเบปเบเบเบฐเปเบซเบเบเบเปเบฒเบเบเบงเบฒเบกเบเบญเบเปเบ. เบซเบเบถเปเบ Dockerfile เบเบฐเบเปเบงเบเบชเปเบฒเบเบเบธเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบฐเปเบเบเบฎเบนเบเบเบฒเบเบเบฒเบ repository, เบเบตเบชเบญเบ (Dockerfile_tar) เบเบฐเบเปเบงเบเบชเปเบฒเบเบเบธเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบฐเปเบเบเปเบเบฅเป tar เบเบฑเบเบฎเบนเบเบเบฒเบ.
1. เปเบญเบปเบฒเปเบเบฅเป Docker เบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบเปเบฅเบฐ scripts เบเบฒเบ repository
2. เบเบงเบเปเบฎเบปเบฒเปเบเบตเบเบเบปเบงเบกเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบญเบ:
docker build -t dscan:image -f docker_security.df .
3. เบซเบผเบฑเบเบเบฒเบเบเบฐเบเบญเบเบชเปเบฒเปเบฅเบฑเบเปเบฅเปเบง, เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบเบนเปเบเบญเบเปเบเบเปเบเบตเบเบฒเบเบฎเบนเบ. เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก DOCKERIMAGE เบเปเบงเบเบเบทเปเบเบญเบเบฎเบนเบเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบชเบปเบเปเบเปเบฅเบฐเบเบดเบเบเบฑเปเบ Dockerfile เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบฒเบเปเบเบทเปเบญเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบซเบฒเปเบเบฅเป. /Dockerfile (เบชเบฑเบเปเบเบเบงเปเบฒเบเปเบญเบเบเบฒเบเปเบชเบฑเปเบเบเบฒเบเบขเปเบฒเบเปเบเปเบเบดเบเปเบเบซเบฒเปเบเบฅเปเบเบตเป):
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
ะ ะตะทัะปััะฐัั
เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบดเปเบเบเบฝเบเปเบเปเบซเบเบถเปเบเบเบธเบเบเบทเปเบเบเบฒเบเบเบญเบเบญเบธเบเบฐเบเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบฐเปเบเบ Docker artifacts, เปเบเบดเปเบ, เปเบเบเบงเบฒเบกเบเบดเบเปเบซเบฑเบเบเบญเบเบเปเบฒเบเบฐเปเบเบปเปเบฒ, เบเบฐเบชเบดเบเบเบดเบเบฒเบเบซเบผเบฒเบเบเบงเบกเปเบญเบปเบฒเบชเปเบงเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบญเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบงเบฒเบกเบเบญเบเปเบเบฎเบนเบเบเบฒเบ. เบเบฑเบเบกเบตเบเปเบฒเบเบงเบเบเบฐเบซเบเบฒเบเปเบซเบเปเบเบญเบเปเบเบทเปเบญเบเบกเบทเบเบตเปเบเปเบฒเบเปเบฅเบฐเบเปเปเปเบชเบเบเปเบฒเบเบตเปเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฝเบงเบเบฑเบ, เปเบเปเบกเบเบปเบเบฅเบฒเบเบเบฒเบเบเบตเปเบชเบงเบเบเบฒเบกเบซเบผเบทเปเบฎเบฑเบเบงเบฝเบเบขเปเบฒเบเบเบฝเบงเปเบเปเบซเบกเบ console, เบเบฒเบเบเบปเบเบซเบธเปเบกเบเบญเบเบฅเบฐเบเบปเบเบเบฒเบเบเบฑเบเบเบฒเบเบเบนเปเบเบญเบเปเบเบเปเบเบต, เปเบฅเบฐเบญเบทเปเบเป. เบชเบฐเบเบฒเบเบฅเบงเบกเบเบญเบเปเบเบทเปเบญเบเบกเบทเปเบซเบผเบปเปเบฒเบเบตเปเปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบญเบฒเบเบเบฐเบเบฒเบเบปเบเบเบถเปเบเปเบฅเบฑเบเบเปเบญเบเบเปเปเบกเบฒ. .
เบชเบดเปเบเบเบตเปเบเบตเบเปเบฝเบงเบเบฑเบเบเบธเบเปเบเบทเปเบญเบเบกเบทเบเบตเปเบญเบฐเบเบดเบเบฒเบเปเบงเปเปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเปเบกเปเบเบงเปเบฒเบเบงเบเบกเบฑเบเบเบฑเบเบซเบกเบปเบเปเบกเปเบเปเบซเบผเปเบเปเบเบตเบเปเบฅเบฐเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบปเบเบฅเบญเบเบเบฑเบเบเบงเบเบกเบฑเบเปเบฅเบฐเปเบเบทเปเบญเบเบกเบทเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเบญเบทเปเบเปเปเบเบทเปเบญเบเบญเบเบซเบฒเบชเบดเปเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเปเบฅเบฐเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบเบเปเบฒเบ. เปเบเปเบเบญเบ, เบเปเบญเบเปเบซเบงเปเบเบฑเบเบซเบกเบปเบเบเบตเปเบเบปเบเปเบซเบฑเบเบเบงเบเปเบเปเบฎเบฑเบเบเบฒเบเบชเบถเบเบชเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเปเบเปเบเบทเปเบญเบเปเบเบชเบฐเปเบเบฒเบฐ, เปเบเปเบเบตเปเปเบกเปเบเบซเบปเบงเบเปเปเบชเปเบฒเบฅเบฑเบเบเบปเบเบเบงเบฒเบกเบเบฐเบซเบเบฒเบเปเบซเบเปเปเบเบญเบฐเบเบฒเบเบปเบ.
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบซเบงเบฑเบเบงเปเบฒเบเบนเปเบกเบทเบเบตเป, เบชเบฐเบเบดเบเปเบฅเบฐเปเบเบทเปเบญเบเปเบเปเบเปเบฒเบเปเบเบฐเบเปเบงเบเปเบซเปเบเปเบฒเบเปเบฅเบฐเบเบฒเบเปเบเบฑเบเบเบธเบเปเบฅเบตเปเบกเบเบปเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเปเบฒเบเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบตเปเบเบญเบเปเบเบเบงเปเบฒเปเบเบเบทเปเบเบเบตเปเบเบญเบเบเบฒเบเบเบฑเบเบเบธ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com