Intégration à Jenkins
3 juillet 2024
ID 198031
Kaspersky Endpoint Security prend en charge l'intégration à Jenkins. Les plug-ins Jenkins Pipeline peuvent être utilisés pour analyser des images Docker à différentes étapes. Par exemple, vous pouvez analyser des images Docker dans un référentiel pendant le processus de développement ou avant la publication.
Pour intégrer Kaspersky Endpoint Security à Jenkins :
- Installez Kaspersky Endpoint Security sur un nœud Jenkins.
- Installez Docker Engine sur un nœud Jenkins.
Pour en savoir plus, reportez-vous à la documentation de Docker Engine.
- Octroyez les privilèges d'administrateur de l'application Kaspersky Endpoint Security à l'utilisateur Jenkins :
kesl-control --grant-role admin <
nom d'utilisateur
Jenkins>
- Ajoutez un utilisateur Jenkins au groupe de dockers :
sudo usermod -aG docker <
nom d'utilisateur
Jenkins>
En général, le nom jenkins est utilisé.
- Dans Jenkins, créez une tâche de compilation nommée
test
(New Item → Enter an item name). - Configurez votre projet, selon vos besoins. On suppose qu'en conséquence, vous avez une image ou un conteneur démarré que vous devez analyser.
- Pour démarrer le conteneur Docker, ajoutez le script suivant à la procédure de build Jenkins. Si vous utilisez des plug-ins Jenkins ou une autre façon de démarrer les conteneurs Docker, enregistrez l'ID du conteneur Docker en cours d'exécution dans le fichier /tmp/kesl_cs_info pour une analyse ultérieure :
TMP_FILE="/tmp/kesl_cs_info"
EXIT_CODE=0
echo "Start container from image: '${TEST_CONTAINER_IMAGE}'"
CONTAINER_ID=$(docker run -d -v /storage:/storage ${TEST_CONTAINER_IMAGE} /storage/docker_process.sh)
if [ -z "${CONTAINER_ID}" ] ; then
echo "Cannot start container from image ${TEST_CONTAINER_IMAGE}"
exit 1
fi
echo "${CONTAINER_ID}" > ${TMP_FILE}
exit ${EXIT_CODE}
- Après avoir construit les artefacts, ajoutez le script suivant aux étapes de construction des jenkins.
Ce script prend en charge un conteneur pour l'analyse. Si nécessaire, modifiez le script selon vos besoins.
TMP_FILE="/tmp/kesl_cs_info"
EXIT_CODE=0
if [ ! -f "${TMP_FILE}" ] ; then
echo "Cannot find temporary file with container ID: '${TMP_FILE}'"
exit 1
fi
CONTAINER_ID=$(cat ${TMP_FILE})
if [ -z "${CONTAINER_ID}" ] ; then
echo "Cannot find container ID in the temporary file: '${TMP_FILE}'"
exit 1
fi
echo "Start anti-virus scan for: '${CONTAINER_ID}'"
THREATS_AMOUNT=$(kesl-control --scan-container ${CONTAINER_ID}|grep 'Total detected objects'|awk '{print $5}')
if [ "${THREATS_AMOUNT}" != "0" ] ; then
echo "ATTENTION! ${THREATS_AMOUNT} threats detected at: '${CONTAINER_ID}'"
EXIT_CODE=1
else
echo "Not threats found"
fi
echo "Remove container: {${CONTAINER_ID}}"
docker kill ${CONTAINER_ID}
docker rm -f ${CONTAINER_ID}
rm -f ${TMP_FILE}
- Pour lancer l'analyse d'une image Docker à partir d'un référentiel, utilisez le script suivant :
DOCKER_FILE=https://raw.githubusercontent.com/ianmiell/simple-dockerfile/master/Dockerfile
DOCKER_FILE_FETCHED=$$.Dockerfile
TEST_IMAGE_NAME=test_image
echo "Build image from ${DOCKER_FILE}"
curl ${DOCKER_FILE} -o ${DOCKER_FILE_FETCHED}
if [ -f ${DOCKER_FILE_FETCHED} ] ; then
echo "Dockerfile fetched: ${DOCKER_FILE_FETCHED}"
else
echo "Dockerfile not fetched"
exit 1
fi
docker build -f ${DOCKER_FILE_FETCHED} -t ${TEST_IMAGE_NAME}
echo "Scan docker image"
SCAN_RESULT=$(/opt/kaspersky/kesl/bin/kesl-control --scan-container ${TEST_IMAGE_NAME}*)
echo "Scan done: "
echo $SCAN_RESULT
- Enregistrez la tâche de build.