Kaspersky Endpoint Security 11 for Linux

与 Jenkins 集成

2023年4月20日

ID 198031

Kaspersky Endpoint Security 支持与 Jenkins 集成。Jenkins Pipeline 插件可用于在不同阶段扫描 Docker 映像。例如,您可以在开发期间或发布之前扫描存储库中的 Docker 映像。

要将 Kaspersky Endpoint Security 与 Jenkins 集成:

  1. 请在 Jenkins 节点上安装 Kaspersky Endpoint Security。
  2. 在 Jenkins 节点上安装 Docker Engine。

    有关详细信息,请参见 Docker Engine 文档

  3. 向 Jenkins 用户授予 Kaspersky Endpoint Security 管理员权限:

    kesl-control --grant-role admin <Jenkins 用户名>

  4. 将 Jenkins 用户添加到 docker 组:

    sudo usermod -aG docker <Jenkins 用户名>

    通常使用 jenkins 这一名称。

  5. 在 Jenkins 中,创建一个名为 test 的新构建作业(新建项目输入项目名称)。

    jenkins_create_job

  6. 根据您的需求配置您的项目。假设结果是,您有一个映像或一个已启动的容器需要扫描。
  7. 要启动 Docker 容器,请将以下脚本添加到 Jenkins 构建过程中。如果您使用 Jenkins 插件或其他方式来启动 Docker 容器,请将运行中的 Docker 容器的 ID 保存到 /tmp/kesl_cs_info 文件中,以便进一步扫描:

    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}

    jenkins_contianer_name

  8. 构建工件后,在步骤中添加以下脚本以构建 jenkins。

    对于扫描,此脚本支持一个容器。如有必要,请根据您的需求修改脚本。

    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}

  9. 要从存储库中扫描 Docker 映像,请使用以下脚本:

    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

  10. 保存构建作业。

Did you find this article helpful?
What can we do better?
Thank you for your feedback! You're helping us improve.
Thank you for your feedback! You're helping us improve.