Skip to content

Commit 89ddfe9

Browse files
authored
Update README.md
1 parent c6a2862 commit 89ddfe9

File tree

1 file changed

+141
-5
lines changed

1 file changed

+141
-5
lines changed

zadanie2/README.md

Lines changed: 141 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,153 @@
44
* Wygenerowanie PAT na Github
55
* Wygenerowanie tokena na Dockerhub
66
* Ustawienie zmiennych środowiskowych dla projektu
7-
* Ustawienie 'secret-ów' dla projektu
8-
7+
* Ustawienie 'secret-ów' dla projektu
98

109

1110
## 2. Opracowanie łańcucha (pipeline) w usłudze GitHub Actions
1211

1312
### Obraz spełnia warunki:
1413
* Wpiera architekturę linux/arm64 oraz linux/amd64
1514
* są wykorzystywane dane cache (eksporter: registry oraz backend-u registry w trybie max) zamieszczone w publicznym repozytorium na [DockerHub](https://hub.docker.com/r/timtur/zadanie2-cache).
16-
* Test CVE obrazu, który miał zapewnić, że obraz by był przesłany do publicznego repozytorium obrazów na GitHub, pod warunkiem, że obraz nie będzie zawierał zagrożeń sklasyfikowanych jako krytyczne lub wysokie został wykonany, jednakże nie dało się wyeliminować zagrożeń (_**1 critical i 4 high** z powodu braku możliwości pobrania nowszej wersji paczki `pkg:golang/stdlib@1.22.4`_)
15+
* Test CVE obrazu, który miał zapewnić, że obraz by był przesłany do publicznego repozytorium obrazów na GitHub, pod warunkiem, że obraz nie będzie zawierał zagrożeń sklasyfikowanych jako krytyczne lub wysokie został wykonany, jednakże nie dało się wyeliminować zagrożeń (_**1 critical i 4 high** z powodu braku możliwości pobrania nowszej wersji paczki `pkg:golang/stdlib@1.22.4`_). Po usunięciu testu obraz jest pomyślnie wysłany do publicznego repozutorium.
16+
17+
> [!NOTE]
18+
> Plik 'zad2.yml' - instrukcja do wyzwolenia usługi Github Actions dla tego zadania znajduje się w katalogu 'docker/.github/workflows/'
19+
20+
## Pliki wykorzystane w projekcie
21+
22+
### Plik Dockerfile (trochę zmieniony w porównaniu do zadania 1)
23+
```
24+
# Obraz bazowy node alpine
25+
FROM node:24-alpine AS nodebuilder
26+
27+
# Uzycie zmiennej wersji
28+
ARG VERSION
29+
ENV VERSION=${VERSION}
30+
31+
# Ustawienie katalogu roboczego
32+
WORKDIR /app
33+
34+
# Kopiowanie plikow package
35+
COPY package.json .
36+
37+
# Instalacja zaleznosci produkcyjnych
38+
RUN npm install --production
39+
40+
# Kopiowanie pozostalych plikow aplikacji
41+
COPY . .
42+
43+
# Etap 2: Obraz koncowy
44+
FROM nodebuilder
45+
46+
# Skopiowanie aplikacji z poprzedniego etapu
47+
COPY --from=nodebuilder /app /app
48+
49+
# Dodanie pliku konfiguracyjnego 'JSON'
50+
COPY config.json /app/config.json
51+
52+
# Dodanie metadanych autora
53+
LABEL author="Tomasz Persa"
54+
55+
# Eksponowanie portu
56+
EXPOSE 3000
57+
58+
# Sprawdzanie, czy serwer dziala
59+
HEALTHCHECK --interval=10s --timeout=3s --start-period=5s --retries=3 \
60+
CMD wget --spider --quiet http://localhost:3000 || exit 1
61+
62+
# Uruchomienie aplikacji
63+
CMD ["npm", "start"]
64+
```
65+
66+
### Plik `zad2.yml`
67+
```
68+
name: Build and Push Zadanie2 Docker Image
69+
70+
on:
71+
push:
72+
paths:
73+
- 'zadanie2/**'
74+
workflow_dispatch:
75+
76+
jobs:
77+
build-and-push:
78+
runs-on: ubuntu-latest
79+
permissions:
80+
contents: read
81+
packages: write # for GHCR
82+
id-token: write # for registry logins if using OIDC
83+
84+
steps:
85+
- name: Checkout repository
86+
uses: actions/checkout@v4
87+
88+
- name: Set up QEMU for multi‑arch emulation
89+
uses: docker/setup-qemu-action@v2
90+
with:
91+
platforms: linux/amd64, linux/arm64
92+
93+
- name: Set up Docker Buildx
94+
uses: docker/setup-buildx-action@v2
95+
with:
96+
buildkitd-flags: --debug
97+
98+
- name: Log in to Docker Hub (for cache)
99+
uses: docker/login-action@v2
100+
with:
101+
registry: docker.io
102+
username: ${{ vars.DOCKERHUB_USERNAME }}
103+
password: ${{ secrets.DOCKERHUB_TOKEN }}
104+
105+
- name: Log in to GitHub Container Registry
106+
uses: docker/login-action@v2
107+
with:
108+
registry: ghcr.io
109+
username: ${{ vars.GH_USERNAME }}
110+
password: ${{ secrets.GH_TOKEN }}
111+
112+
- name: Build image with cache
113+
id: build
114+
uses: docker/build-push-action@v6
115+
with:
116+
context: ./zadanie2
117+
file: ./zadanie2/dockerfile
118+
platforms: linux/amd64,linux/arm64
119+
push: false
120+
tags: ghcr.io/${{ github.repository_owner }}/zadanie2:${{ github.sha }}
121+
cache-from: |
122+
type=registry,ref=${{ vars.DOCKERHUB_USERNAME }}/zadanie2-cache:cache
123+
cache-to: |
124+
type=registry,mode=max,ref=${{ vars.DOCKERHUB_USERNAME }}/zadanie2-cache:cache
125+
126+
# - name: Scan for vulnerabilities (Docker Scout)
127+
# uses: docker/scout-action@v1.18.1 # lub najnowsza stabilna wersja
128+
# with:
129+
# command: cves # obowiązkowy parametr „command” :contentReference[oaicite:0]{index=0}
130+
# only-severities: critical,high # filtr na CVE o statusie critical lub high :contentReference[oaicite:1]{index=1}
131+
# exit-code: true
132+
# github-token: ${{ secrets.GH_TOKEN }} # zamiast „token” należy użyć „github-token” :contentReference[oaicite:2]{index=2}
133+
# format: json
134+
# output: scout-report.json
135+
136+
137+
# - name: Check scan results
138+
# id: scout-check
139+
# run: |
140+
# high=$(jq '[.vulnerabilities[] | select(.severity=="high" or .severity=="critical")] | length' scout-report.json)
141+
# echo "count=$high" >> $GITHUB_OUTPUT
17142
18-
19-
(Plik 'zad2.yml' - instrukcja do wyzwolenia usługi Github Actions dla tego zadania znajduje się w katalogu 'docker/.github/workflows/')
143+
- name: Push image if secure
144+
# if: steps.scout-check.outputs.count == '0'
145+
uses: docker/build-push-action@v4
146+
with:
147+
context: ./zadanie2
148+
file: ./zadanie2/dockerfile
149+
platforms: linux/amd64,linux/arm64
150+
push: true
151+
tags: |
152+
ghcr.io/${{ github.repository_owner }}/zadanie2:latest
153+
ghcr.io/${{ github.repository_owner }}/zadanie2:${{ github.sha }}
154+
```
20155

156+
Reszta plików projektowych jest taka sama jak w zadaniu 1.

0 commit comments

Comments
 (0)