Salta el contingut

Eines Principals del Mercat

3. Eines Principals del Mercat

3.1 Jenkins

Versió: Jenkins 2.440.x (LTS estable a gener 2025)
Tipus: Self-hosted, open source
Llenguatge: Java
URL: https://www.jenkins.io/

Característiques: - Una de les eines més antigues i establertes (2011) - Altament extensible amb més de 1.800 plugins - Suporta pipelines com a codi (Jenkinsfile) - Requereix infraestructura pròpia (servidor dedicat) - Gran comunitat i documentació

Casos d'ús ideals: - Organitzacions que necessiten control total - Entorns amb requisits de seguretat estrictes (on-premises) - Pipelines molt complexos i personalitzats

Exemple de Jenkinsfile:

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            steps {
                sh './deploy.sh'
            }
        }
    }
}

Referències: - Documentació oficial: https://www.jenkins.io/doc/ - Pipeline Syntax: https://www.jenkins.io/doc/book/pipeline/syntax/

3.2 GitLab CI/CD

Versió: GitLab 16.x (Community i Enterprise)
Tipus: Integrat amb GitLab, self-hosted o cloud
Format: YAML (.gitlab-ci.yml)
URL: https://docs.gitlab.com/ee/ci/

Característiques: - Integració nativa amb Git (mateix producte) - No requereix configuració externa si uses GitLab - Runners que executen els jobs (shared o self-hosted) - Auto DevOps: configuració automàtica per projectes estàndard - Container Registry integrat

Casos d'ús ideals: - Equips que ja usen GitLab com a repositori - Necessitat d'integració completa DevOps en una sola plataforma - Projectes que usen Docker intensivament

Exemple de .gitlab-ci.yml:

stages:
  - build
  - test
  - deploy

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository"

build-job:
  stage: build
  image: maven:3.9-openjdk-17
  script:
    - mvn clean package
  artifacts:
    paths:
      - target/*.jar
    expire_in: 1 week

test-job:
  stage: test
  image: maven:3.9-openjdk-17
  script:
    - mvn test
  coverage: '/Total.*?([0-9]{1,3})%/'

deploy-production:
  stage: deploy
  script:
    - echo "Deploying to production server"
    - scp target/*.jar user@production-server:/app/
  only:
    - main
  when: manual

Referències: - Documentació CI/CD: https://docs.gitlab.com/ee/ci/ - Examples: https://docs.gitlab.com/ee/ci/examples/

3.3 GitHub Actions

Versió: En constant evolució (servei cloud)
Tipus: Cloud-native, integrat amb GitHub
Format: YAML (.github/workflows/)
URL: https://docs.github.com/en/actions

Característiques: - Integració perfecta amb GitHub - Marketplace amb milers d'accions reutilitzables - Minuts gratuïts en plans públics i privats - Matrix builds per provar múltiples versions - Secrets management integrat

Casos d'ús ideals: - Projectes open source a GitHub - Equips petits que no volen gestionar infraestructura - Necessitat d'accions comunitàries predefinides

Exemple de workflow (.github/workflows/ci.yml):

name: CI/CD Pipeline

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Set up JDK 17
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: 'temurin'

    - name: Cache Maven packages
      uses: actions/cache@v3
      with:
        path: ~/.m2
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}

    - name: Build with Maven
      run: mvn clean package

    - name: Run tests
      run: mvn test

    - name: Upload artifact
      uses: actions/upload-artifact@v3
      with:
        name: application
        path: target/*.jar

  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'

    steps:
    - name: Download artifact
      uses: actions/download-artifact@v3
      with:
        name: application

    - name: Deploy to production
      env:
        DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
      run: |
        echo "Deploying to production..."
        # Your deployment script here

Referències: - Documentació: https://docs.github.com/en/actions - Marketplace: https://github.com/marketplace?type=actions

3.4 CircleCI

Versió: CircleCI Cloud (servei gestionat)
Tipus: Cloud o self-hosted
Format: YAML (.circleci/config.yml)
URL: https://circleci.com/docs/

Característiques: - Configuració basada en Docker - Orbs (paquets reutilitzables de configuració) - Execució paral·lela de tests - Insights i analytics avançats - Integració amb AWS, Azure, GCP

Casos d'ús ideals: - Aplicacions containeritzades - Necessitat d'executar molts tests en paral·lel - Equips que busquen velocitat d'execució

Exemple de config.yml:

version: 2.1

orbs:
  node: circleci/node@5.1.0

jobs:
  build-and-test:
    docker:
      - image: cimg/node:18.19
    steps:
      - checkout
      - node/install-packages:
          pkg-manager: npm
      - run:
          name: Run tests
          command: npm test
      - run:
          name: Build application
          command: npm run build
      - persist_to_workspace:
          root: .
          paths:
            - dist

  deploy:
    docker:
      - image: cimg/node:18.19
    steps:
      - attach_workspace:
          at: .
      - run:
          name: Deploy to production
          command: |
            npm run deploy

workflows:
  build-test-deploy:
    jobs:
      - build-and-test
      - deploy:
          requires:
            - build-and-test
          filters:
            branches:
              only: main

Referències: - Documentació: https://circleci.com/docs/ - Orbs Registry: https://circleci.com/developer/orbs

3.5 Azure DevOps Pipelines

Versió: Azure DevOps Services (cloud)
Tipus: Cloud o self-hosted (Azure DevOps Server)
Format: YAML (azure-pipelines.yml)
URL: https://learn.microsoft.com/azure/devops/pipelines/

Característiques: - Integració profunda amb ecosistema Microsoft - Suport per aplicacions .NET, Java, Python, Node.js - Agents de build (Microsoft-hosted o self-hosted) - Gestió de releases amb aprovacions - Integració amb Azure Cloud

Casos d'ús ideals: - Organitzacions amb stack Microsoft - Aplicacions .NET - Empreses que usen Azure

Exemple de azure-pipelines.yml:

trigger:
  branches:
    include:
      - main
      - develop

pool:
  vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'

stages:
- stage: Build
  jobs:
  - job: BuildJob
    steps:
    - task: UseDotNet@2
      inputs:
        version: '8.x'

    - task: DotNetCoreCLI@2
      displayName: 'Restore packages'
      inputs:
        command: 'restore'

    - task: DotNetCoreCLI@2
      displayName: 'Build project'
      inputs:
        command: 'build'
        arguments: '--configuration $(buildConfiguration)'

    - task: DotNetCoreCLI@2
      displayName: 'Run tests'
      inputs:
        command: 'test'
        arguments: '--configuration $(buildConfiguration)'

- stage: Deploy
  dependsOn: Build
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  jobs:
  - deployment: DeployWeb
    environment: 'production'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            inputs:
              azureSubscription: 'MyAzureSubscription'
              appName: 'my-web-app'
              package: '$(Pipeline.Workspace)/**/*.zip'

Referències: - Documentació: https://learn.microsoft.com/azure/devops/pipelines/ - YAML Schema: https://learn.microsoft.com/azure/devops/pipelines/yaml-schema/

3.6 Comparativa d'Eines

Característica Jenkins GitLab CI GitHub Actions CircleCI Azure DevOps
Cost Gratuït (infra pròpia) Gratuït/Premium Gratuït amb límits Gratuït amb límits Gratuït amb límits
Hosting Self-hosted Cloud/Self-hosted Cloud Cloud/Self-hosted Cloud/Self-hosted
Corba d'aprenentatge Alta Mitjana Baixa Baixa Mitjana
Flexibilitat Molt alta Alta Alta Mitjana-Alta Alta
Ecosistema Plugins Integrat GitLab GitHub Marketplace Orbs Azure Services
Millor per a Empreses grans Equips GitLab Projectes GitHub Apps containeritzades Stack Microsoft