Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (5.0%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Basic Info
  • Host: GitHub
  • Owner: Andyn151
  • License: mit
  • Language: Python
  • Default Branch: main
  • Size: 30.9 MB
Statistics
  • Stars: 0
  • Watchers: 2
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created over 1 year ago · Last pushed over 1 year ago
Metadata Files
Readme Contributing License Citation Security

README.md

CI/CD Prctica con CircleCI, Docker, SonarCloud y Kubernetes

Este repositorio contiene una aplicacin de ejemplo que sigue un flujo de CI/CD implementado utilizando CircleCI para las pruebas, anlisis de cdigo esttico, generacin de artefactos, y publicacin de imgenes Docker. Adems, est configurada para desplegarse en Kubernetes usando ArgoCD.

Requisitos previos

  1. Cuenta en Docker Hub (para subir imgenes de Docker).
  2. Cuenta en SonarCloud (para anlisis de cdigo esttico).
  3. Cuenta en CircleCI (para gestionar el CI/CD).
  4. Acceso a un cluster de Kubernetes (para realizar despliegues).
  5. Instalacin de herramientas locales:

Estructura del proyecto

```bash . .circleci config.yml # Configuracin de CircleCI Dockerfile # Definicin del contenedor Docker manifests # Manifestos de Kubernetes para despliegue requirements.txt # Dependencias de Python sonar-project.properties # Configuracin de SonarCloud tests test_example.py # Pruebas unitarias .flake8 # Configuracin de Flake8 coverage/coverage.xml # Reporte de cobertura de cdigo README.md # Este archivo

Paso 1: Creacin de tokens de acceso

1.1. Docker Hub Token Ve a tu cuenta de Docker Hub y genera un Access Token. Configura el token en CircleCI: Crea dos variables de entorno en la configuracin de tu proyecto de CircleCI: DOCKERUSER: Tu nombre de usuario de Docker Hub. DOCKERPASS: El token generado. 1.2. SonarCloud Token Accede a SonarCloud y genera un token en tu perfil. Configura el token en CircleCI: Crea las siguientes variables de entorno en CircleCI: SONARTOKEN: El token generado. SONARPROJECTKEY: El identificador de tu proyecto en SonarCloud. SONARORG: La organizacin a la que pertenece el proyecto.

Paso 2: Crear el archivo requirements.txt

Define las dependencias de tu proyecto en este archivo para gestionar el entorno de Python. fastapi==0.78.0 pytest==6.2.4 pytest-cov==2.12.1 httpx==0.21.0 flake8==3.9.2

Paso 3: Configuracin de CircleCI

Dentro de la carpeta .circleci, crea el archivo config.yml que define los trabajos a ejecutar en el pipeline. version: 2.1

orbs: sonarcloud: sonarsource/sonarcloud@2.0.0

jobs: test: docker: - image: cimg/python:3.9 steps: - checkout - run: name: Instalar dependencias command: | pip install --upgrade pip pip install -r requirements.txt - run: name: Ejecutar pruebas command: pytest --cov=backend --cov-report xml:coverage.xml - run: name: Ejecutar linting command: flake8 . - storetestresults: path: test-results - storeartifacts: path: coverage/coverage.xml - sonarcloud/scan - setupremotedocker - run: name: Build Docker image command: docker build -t andyn151/mi-app:latest . - run: name: Test Docker image command: docker run --rm andyn151/mi-app:latest pytest - run: name: Login to Docker Hub command: | echo $DOCKERPASS | docker login -u $DOCKER_USER --password-stdin - run: name: Push Docker image to Docker Hub command: docker push andyn151/mi-app:latest

workflows: version: 2 workflow_test: jobs: - test

Paso 4: Configurar SonarCloud

Crea el archivo sonar-project.properties en la raz del proyecto. sonar.host.url=https://sonarcloud.io sonar.token=$SONARTOKEN sonar.projectKey=Andyn151CI-CDpractica sonar.organization=andyn151 sonar.python.coverage.reportPaths=coverage/coverage.xml sonar.exclusions=*/.js, */.css, docssrc/, scripts/ sonar.sonarcloud.disableAutomaticAnalysis=true

Paso 5: Crear pruebas unitarias y reporte de cobertura

En la carpeta tests, crea el archivo test_example.py con una prueba simple.

def test_example(): assert 1 + 1 == 2

Luego, asegrate de que CircleCI est generando un reporte de cobertura que SonarCloud pueda leer. El archivo coverage.xml se genera en la carpeta coverage/.

pytest --cov=scripts --cov-report xml:coverage/coverage.xml

Paso 6: Crear el Dockerfile

Este archivo define cmo se construye la imagen de Docker que se sube a Docker Hub y luego se despliega.

FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --upgrade pip && pip install -r requirements.txt COPY . . CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Paso 7: Manifestos de Kubernetes para ArgoCD

En la carpeta manifests, crea los manifiestos necesarios para desplegar la aplicacin en Kubernetes usando ArgoCD. apiVersion: apps/v1 kind: Deployment metadata: name: mi-app spec: replicas: 1 selector: matchLabels: app: mi-app template: metadata: labels: app: mi-app spec: containers: - name: mi-app image: andyn151/mi-app:latest ports: - containerPort: 8000

service.yaml

apiVersion: v1 kind: Service metadata: name: mi-app-service spec: selector: app: mi-app ports: - protocol: TCP port: 80 targetPort: 8000 type: LoadBalancer

Paso 8: Despliegue en Kubernetes usando ArgoCD

Sube los manifiestos a tu repositorio de GitHub y configralos en ArgoCD para desplegar la aplicacin automticamente al hacer push a la rama main.

Paso 9: Generacin de artefactos

En el archivo config.yml, puedes agregar un paso para generar y publicar artefactos de la aplicacin en Nexus o Docker Hub, si as lo deseas.

Owner

  • Login: Andyn151
  • Kind: user

GitHub Events

Total
  • Member event: 1
  • Push event: 96
  • Create event: 2
Last Year
  • Member event: 1
  • Push event: 96
  • Create event: 2

Dependencies

Dockerfile docker
  • python 3.9-slim build
requirements-docs-insiders.txt pypi
requirements-docs-tests.txt pypi
  • httpx >=0.23.0,<0.28.0 test
  • ruff ==0.6.4 test
requirements-docs.txt pypi
  • black ==24.3.0
  • cairosvg ==2.7.1
  • griffe-typingdoc ==0.2.7
  • jieba ==0.42.1
  • markdown-include-variants ==0.0.3
  • mdx-include >=1.4.1,<2.0.0
  • mkdocs-macros-plugin ==1.0.5
  • mkdocs-material ==9.5.18
  • mkdocs-redirects >=1.2.1,<1.3.0
  • mkdocstrings ==0.26.1
  • pillow ==10.4.0
  • pyyaml >=5.3.1,<7.0.0
  • typer ==0.12.3
requirements-github-actions.txt pypi
  • PyGithub >=2.3.0,<3.0.0
  • httpx >=0.27.0,<0.28.0
  • pydantic >=2.5.3,<3.0.0
  • pydantic-settings >=2.1.0,<3.0.0
  • smokeshow *
requirements-tests.txt pypi
  • PyJWT ==2.8.0 test
  • anyio >=3.2.1,<4.0.0 test
  • coverage >=6.5.0,<8.0 test
  • dirty-equals ==0.6.0 test
  • flask >=1.1.2,<3.0.0 test
  • inline-snapshot ==0.13.0 test
  • mypy ==1.8.0 test
  • passlib >=1.7.2,<2.0.0 test
  • pytest >=7.1.3,<8.0.0 test
  • pyyaml >=5.3.1,<7.0.0 test
  • sqlmodel ==0.0.22 test
  • types-orjson ==3.6.2 test
  • types-ujson ==5.7.0.1 test
requirements.txt pypi
  • flake8 >=3.9.2
  • httpx >=0.21.0
  • pytest >=6.2.4
  • pytest-cov >=2.12.1
  • sphinx >=4.0.0
  • sphinx_rtd_theme >=0.5.2