ci-cd_practica
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
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
Metadata Files
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
- Cuenta en Docker Hub (para subir imgenes de Docker).
- Cuenta en SonarCloud (para anlisis de cdigo esttico).
- Cuenta en CircleCI (para gestionar el CI/CD).
- Acceso a un cluster de Kubernetes (para realizar despliegues).
- 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
- Repositories: 1
- Profile: https://github.com/Andyn151
GitHub Events
Total
- Member event: 1
- Push event: 96
- Create event: 2
Last Year
- Member event: 1
- Push event: 96
- Create event: 2
Dependencies
- python 3.9-slim build
- httpx >=0.23.0,<0.28.0 test
- ruff ==0.6.4 test
- 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
- 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 *
- 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
- 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