|
27 | 27 | script: |
28 | 28 | # Creating workdir |
29 | 29 | - | |
30 | | - echo "Creating workdir" |
| 30 | + echo "🏗️ Creating workdir" |
31 | 31 | workdir="trivy_scan" |
32 | 32 | # remove workdir in case it was not removed on previous run |
33 | 33 | rm -rf "${workdir}" |
|
37 | 37 | echo |
38 | 38 | # Preparing DOCKER_CONFIG and login to registries |
39 | 39 | - | |
40 | | - echo "Preparing DOCKER_CONFIG and login to registries" |
| 40 | + echo "🔐 Preparing DOCKER_CONFIG and login to registries" |
41 | 41 | mkdir -p "${workdir}/docker" |
42 | 42 | export DOCKER_CONFIG="${workdir}/docker" |
43 | | - echo "Logging as ${PROD_REGISTRY_USER} to ${PROD_REGISTRY}" |
| 43 | + echo "🔑 Logging as ${PROD_REGISTRY_USER} to ${PROD_REGISTRY}" |
44 | 44 | echo ${PROD_REGISTRY_PASSWORD} | docker login --username="${PROD_REGISTRY_USER}" --password-stdin ${PROD_REGISTRY} |
45 | | - echo "Logging as ${DEV_REGISTRY_USER} to ${DEV_REGISTRY}" |
| 45 | + echo "🔑 Logging as ${DEV_REGISTRY_USER} to ${DEV_REGISTRY}" |
46 | 46 | echo ${DEV_REGISTRY_PASSWORD} | docker login --username="${DEV_REGISTRY_USER}" --password-stdin ${DEV_REGISTRY} |
47 | 47 | echo |
48 | 48 | echo "=======================================================" |
49 | 49 | echo |
50 | 50 | # Get Trivy |
51 | 51 | - | |
52 | | - echo "Get Trivy" |
53 | | - echo "Trivy version: ${TRIVY_BIN_VERSION}" |
| 52 | + echo "📥 Get Trivy" |
| 53 | + echo "🔖 Trivy version: ${TRIVY_BIN_VERSION}" |
54 | 54 | mkdir -p "${workdir}/bin/trivy-${TRIVY_BIN_VERSION}" |
55 | 55 | curl -L -s --fail-with-body ${CI_API_V4_URL}/projects/${TRIVY_REPO_ID}/packages/generic/trivy-${TRIVY_BIN_VERSION}/${TRIVY_BIN_VERSION}/trivy -o ${workdir}/bin/trivy-${TRIVY_BIN_VERSION}/trivy |
56 | 56 | chmod u+x ${workdir}/bin/trivy-${TRIVY_BIN_VERSION}/trivy |
57 | 57 | ln -s ${PWD}/${workdir}/bin/trivy-${TRIVY_BIN_VERSION}/trivy ${workdir}/bin/trivy |
58 | 58 |
|
59 | | - echo "Updating Trivy Data Bases" |
| 59 | + echo "🔄 Updating Trivy Data Bases" |
60 | 60 | mkdir -p "${workdir}/bin/trivy_cache" |
61 | 61 | ${workdir}/bin/trivy image --username "${PROD_REGISTRY_USER}" --password "${PROD_REGISTRY_PASSWORD}" --download-db-only --db-repository "${TRIVY_DB_URL}" --cache-dir "${workdir}/bin/trivy_cache" |
62 | 62 | ${workdir}/bin/trivy image --username "${PROD_REGISTRY_USER}" --password "${PROD_REGISTRY_PASSWORD}" --download-java-db-only --java-db-repository "${TRIVY_JAVA_DB_URL}" --cache-dir "${workdir}/bin/trivy_cache" |
|
66 | 66 |
|
67 | 67 | # Run Trivy scan |
68 | 68 | - | |
69 | | - echo "Setting up registry path for module" |
| 69 | + echo "⚙️ Setting up registry path for module" |
70 | 70 | PROD_REGISTRY_MODULE_BASEDIR="${PROD_REGISTRY}/${MODULE_PROD_REGISTRY_CUSTOM_PATH:-deckhouse/fe/modules}" |
71 | 71 | DEV_REGISTRY_MODULE_BASEDIR="${DEV_REGISTRY}/${MODULE_DEV_REGISTRY_CUSTOM_PATH:-sys/deckhouse-oss/modules}" |
72 | 72 | severity="${SEVERITY:-UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL}" |
73 | 73 | latest_releases_amount="${LATEST_RELEASES_AMOUNT:-3}" |
74 | 74 |
|
75 | | - echo "Using prod registry module base dir: ${PROD_REGISTRY_MODULE_BASEDIR}" |
76 | | - echo "Using dev registry module base dir: ${DEV_REGISTRY_MODULE_BASEDIR}" |
| 75 | + echo "📦 Using prod registry module base dir: ${PROD_REGISTRY_MODULE_BASEDIR}" |
| 76 | + echo "🧪 Using dev registry module base dir: ${DEV_REGISTRY_MODULE_BASEDIR}" |
77 | 77 |
|
78 | 78 | # If input var TAG is empty - set to default branch |
79 | 79 | if [ -z "${TAG}" ]; then |
80 | | - echo "TAG is empty, setting to default branch: ${CI_DEFAULT_BRANCH}" |
| 80 | + echo "🏷️ TAG is empty, setting to default branch: ${CI_DEFAULT_BRANCH}" |
81 | 81 | TAG="${CI_DEFAULT_BRANCH}" |
82 | 82 | fi |
83 | 83 | # prepare TAG if it was triggered with CI_COMMIT_TAG |
84 | 84 | if [ -n "${CI_COMMIT_TAG}" ]; then |
85 | 85 | TAG=$(echo "${TAG}"| sed 's/^v//' | cut -d '.' -f -2) |
86 | | - echo "Minor tag to scan: ${TAG}" |
| 86 | + echo "🏷️ Minor tag to scan: ${TAG}" |
87 | 87 | fi |
88 | 88 | module_tags=("${TAG}") |
89 | 89 |
|
90 | 90 | if [ "${CI_PIPELINE_SOURCE}" == "schedule" ]; then |
91 | | - echo "Pipeline is scheduled, several latest releases will be scanned" |
| 91 | + echo "⏰ Pipeline is scheduled, several latest releases will be scanned" |
92 | 92 | SCAN_SEVERAL_LASTEST_RELEASES="true" |
93 | 93 | fi |
94 | 94 |
|
95 | | - echo "Getting tags to scan" |
| 95 | + echo "🔍 Getting tags to scan" |
96 | 96 | # Check if provided tag is a semver minor, and if so - get image from prod registry |
97 | 97 | if echo "${TAG}" | grep -qE "[0-9]+\.[0-9]+"; then |
98 | | - echo "TAG is a semver minor, image from prod registry will be used" |
99 | | - echo "Total images for module found: $(crane ls "${PROD_REGISTRY_MODULE_BASEDIR}/${MODULE_NAME}" | wc -l)" |
| 98 | + echo "📊 TAG is a semver minor, image from prod registry will be used" |
| 99 | + echo "📈 Total images for module found: $(crane ls "${PROD_REGISTRY_MODULE_BASEDIR}/${MODULE_NAME}" | wc -l)" |
100 | 100 |
|
101 | 101 | module_tags=($(crane ls "${PROD_REGISTRY_MODULE_BASEDIR}/${MODULE_NAME}" | grep "^v${TAG}\.[0-9]*" | sort -V -r | head -n 1)) |
102 | | - echo "Selected images: ${module_tags[@]}" |
| 102 | + echo "✅ Selected images: ${module_tags[@]}" |
103 | 103 | fi |
104 | 104 | if [ "${SCAN_SEVERAL_LASTEST_RELEASES}" == "true" ]; then |
105 | | - echo "Several latest releases will be scanned: ${latest_releases_amount}" |
| 105 | + echo "📚 Several latest releases will be scanned: ${latest_releases_amount}" |
106 | 106 |
|
107 | 107 | # Get release tags by regexp, sort by sevmer desc, cut to get minor version, uniq and get several latest |
108 | 108 | releases=($(crane ls "${PROD_REGISTRY_MODULE_BASEDIR}/${MODULE_NAME}" | grep "^v[0-9]*\.[0-9]*\.[0-9]*" | sort -V -r)) |
109 | 109 | latest_minor_releases=($(printf '%s\n' "${releases[@]}"| cut -d "." -f -2 | uniq | head -n ${latest_releases_amount})) |
110 | 110 |
|
111 | 111 | for r in "${latest_minor_releases[@]}"; do |
112 | | - echo "Adding image for minor release: ${r} to scan" |
| 112 | + echo "➕ Adding image for minor release: ${r} to scan" |
113 | 113 | module_tags+=($(printf '%s\n' "${releases[@]}" | grep "${r}" | sort -V -r|head -n 1)) |
114 | 114 | done |
115 | 115 | fi |
116 | | - echo "CVE Scan will be applied to the following tags of ${MODULE_NAME} module:" |
| 116 | + echo "🎯 CVE Scan will be applied to the following tags of ${MODULE_NAME} module:" |
117 | 117 | echo "${module_tags[@]}" |
118 | 118 |
|
119 | 119 | # Functions |
|
133 | 133 | tags_string+=",\"${dd_short_release_tag}\",\"${dd_full_release_tag}\"" |
134 | 134 | fi |
135 | 135 | echo "" |
136 | | - echo " Uploading trivy ${dd_branch} report for image \"${dd_image_name}\" of \"${dd_module_name}\" module" |
| 136 | + echo "📤 Uploading trivy ${dd_branch} report for image \"${dd_image_name}\" of \"${dd_module_name}\" module" |
137 | 137 | echo "" |
138 | 138 | dd_upload_response=$(curl -sw "%{http_code}" -X POST \ |
139 | 139 | --retry 10 \ |
|
187 | 187 | \"branch_tag\": \"${dd_branch}\" |
188 | 188 | }") |
189 | 189 | if [ ${dd_eng_patch_response: -3} -eq 200 ]; then |
190 | | - echo "Engagemet \"${dd_engagement_name}\" updated successfully" |
| 190 | + echo "✅ Engagemet \"${dd_engagement_name}\" updated successfully" |
191 | 191 | else |
192 | 192 | echo "!!!WARNING!!!" |
193 | 193 | echo "Engagemet \"${dd_engagement_name}\" WAS NOT UPDATED" |
|
232 | 232 | module_reports="${module_workdir}/reports" |
233 | 233 | mkdir -p "${module_reports}" |
234 | 234 | touch ${module_workdir}/.trivyignore |
235 | | - echo "Image to check: ${module_image}:${module_tag}" |
236 | | - echo "Severity: ${severity}" |
| 235 | + echo "🔍 Image to check: ${module_image}:${module_tag}" |
| 236 | + echo "⚠️ Severity: ${severity}" |
237 | 237 | echo "----------------------------------------------" |
238 | 238 | echo "" |
239 | | - echo "Getting module image" |
| 239 | + echo "📥 Getting module image" |
240 | 240 | crane export "${module_image}:${module_tag}" "${MODULE_NAME}.tar" |
241 | 241 | tar xf "${MODULE_NAME}.tar" -C "${module_workdir}/" |
242 | | - echo "Preparing images list to scan" |
| 242 | + echo "📋 Preparing images list to scan" |
243 | 243 | digests=$(cat "${module_workdir}${IMAGES_DIGESTS_PATH}") |
244 | 244 | # Main module images to scan |
245 | 245 | digests=$(echo "${digests}"|jq --arg i "${MODULE_NAME}" --arg s "${module_tag}" '. += { ($i): ($s) }') |
|
285 | 285 | # License scan |
286 | 286 | trivy_scan "json" "--scanners license --license-full" "--output ${module_reports}/ext_${MODULE_NAME}_${IMAGE_NAME}_report_license.json" "${module_image}@${IMAGE_HASH}" |
287 | 287 | fi |
288 | | - echo " Done" |
| 288 | + echo " ✅ Done" |
289 | 289 |
|
290 | 290 | send_report "CVE" "${module_reports}/ext_${MODULE_NAME}_${IMAGE_NAME}_report.json" "${MODULE_NAME}" "${IMAGE_NAME}" |
291 | 291 | send_report "License" "${module_reports}/ext_${MODULE_NAME}_${IMAGE_NAME}_report_license.json" "${MODULE_NAME}" "${IMAGE_NAME}" |
|
0 commit comments