Evaluar el cumplimiento de políticas en CI
Agregar la evaluación de políticas a tus canalizaciones de integración continua te ayuda a detectar y prevenir casos en los que los cambios de código provocarían que el cumplimiento de las políticas empeore en comparación con tu línea de referencia (baseline).
La estrategia recomendada para la evaluación de políticas en un entorno de CI implica evaluar una imagen local y comparar los resultados con una de referencia. Si el cumplimiento de las políticas para la imagen local es peor que la de referencia especificada, la ejecución de la CI falla con un error. Si el cumplimiento de las políticas es mejor o no cambia, la ejecución de la CI tiene éxito.
Esta comparación es relativa, lo que significa que solo se preocupa por si tu imagen de CI es mejor o peor que la de referencia. No es una comprobación absoluta para aprobar o reprobar todas las políticas. Al medir en relación con una línea de referencia que definas, puedes ver rápidamente si un cambio tiene un impacto positivo o negativo en el cumplimiento de las políticas.
Cómo funciona
Cuando realizas la evaluación de políticas en CI, ejecutas una evaluación de política local sobre la imagen que compilas en tu canalización de CI. Para ejecutar una evaluación local, la imagen que evalúas debe existir en el almacén de imágenes donde se ejecuta tu flujo de trabajo de CI. Compila o descarga la imagen y, a continuación, ejecuta la evaluación.
Para ejecutar la evaluación de políticas y activar el fallo si el cumplimiento de tu imagen local
es peor que tu línea de referencia de comparación, debes especificar la versión de la imagen
que se utilizará como referencia. Puedes codificar de forma fija una referencia de imagen específica, pero
una mejor solución es utilizar entornos
para inferir automáticamente la versión de la imagen a partir de un entorno. El ejemplo que
sigue utiliza entornos para comparar la imagen de CI con la imagen en el
entorno de production.
Ejemplo
El siguiente ejemplo sobre cómo ejecutar la evaluación de políticas en CI utiliza la Docker
Scout GitHub Action para
ejecutar el comando compare en una imagen compilada en CI. El comando compare tiene
una entrada to-env, que ejecutará la comparación frente a un entorno llamado
production. La entrada exit-on está configurada como policy, lo que significa que la
comparación falla únicamente si el cumplimiento de la política ha empeorado.
Este ejemplo no asume que estés utilizando Docker Hub como tu registro de
contenedores. Como resultado, este flujo de trabajo utiliza la acción docker/login-action dos veces:
- Una vez para autenticarte en tu registro de contenedores.
- Una vez más para autenticarte en Docker para descargar los resultados del análisis de tu
imagen de
production.
Si utilizas Docker Hub como tu registro de contenedores, solo necesitas autenticarte una vez.
NoteDebido a una limitación en Docker Engine, no se admite la carga de imágenes multiplataforma o imágenes con atestaciones en el almacén de imágenes.
Para que la evaluación de políticas funcione, debes cargar la imagen en el almacén de imágenes local del runner. Asegúrate de estar compilando una imagen de una sola plataforma sin atestaciones y de estar cargando los resultados de la compilación. De lo contrario, la evaluación de políticas fallará.
Ten en cuenta también el permiso pull-requests: write para el trabajo (job). La Docker Scout
GitHub Action agrega un comentario en la pull request con los resultados de la evaluación
de forma predeterminada, lo que requiere este permiso. Para obtener más detalles, consulta
Pull Request Comments.
name: Docker
on:
push:
tags: ["*"]
branches:
- "main"
pull_request:
branches: ["**"]
env:
REGISTRY: docker.io
IMAGE_NAME: <IMAGE_NAME>
DOCKER_ORG: <ORG>
jobs:
build:
permissions:
pull-requests: write
runs-on: ubuntu-latest
steps:
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v4
- name: Extract metadata
id: meta
uses: docker/metadata-action@v6
with:
images: ${{ env.IMAGE_NAME }}
- name: Build image
id: build-and-push
uses: docker/build-push-action@v7
with:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
sbom: ${{ github.event_name != 'pull_request' }}
provenance: ${{ github.event_name != 'pull_request' }}
push: ${{ github.event_name != 'pull_request' }}
load: ${{ github.event_name == 'pull_request' }}
- name: Authenticate with Docker
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PAT }}
- name: Compare
if: ${{ github.event_name == 'pull_request' }}
uses: docker/scout-action@v1
with:
command: compare
image: ${{ steps.meta.outputs.tags }}
to-env: production
platform: "linux/amd64"
ignore-unchanged: true
only-severities: critical,high
organization: ${{ env.DOCKER_ORG }}
exit-on: policyLa siguiente captura de pantalla muestra cómo se ve el comentario de la PR de GitHub cuando falla una comprobación de evaluación de política porque la política ha empeorado en la imagen de la PR en comparación con la de referencia.

Este ejemplo ha demostrado cómo ejecutar la evaluación de políticas en CI con GitHub Actions. Docker Scout también es compatible con otras plataformas de CI. Para obtener más información, consulta las integraciones de CI de Docker Scout.