Foglio Comandi di CircleCI¶
Installazione¶
| Piattaforma | Comando |
|---|---|
| Linux (curl) | curl -fLSs https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/master/install.sh \ | bash |
| Linux (snap) | sudo snap install circleci |
| macOS (Homebrew) | brew install circleci |
| macOS (curl) | curl -fLSs https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/master/install.sh \ | bash |
| Windows (Chocolatey) | choco install circleci-cli |
| Windows (Scoop) | scoop install circleci |
| Verify Installation | circleci version |
| Initial Setup | circleci setup |
| Update CLI | circleci update |
| ## Comandi Base |
| Comando | Descrizione |
|---|---|
circleci config validate |
Validate your .circleci/config.yml file |
circleci config validate -c path/to/config.yml |
Convalidare un file di configurazione specifico |
circleci config process .circleci/config.yml |
Elabora ed espandi la configurazione (risolvi orbs) |
circleci local execute |
Esegui un job localmente utilizzando Docker |
circleci local execute --job job-name |
Esegui un job specifico localmente |
circleci follow |
Elenca tutti i progetti seguiti |
circleci follow github/org/repo |
Segui un progetto specifico |
circleci project info github/org/repo |
Ottieni informazioni sul progetto |
circleci pipeline run github/org/repo |
Attiva una nuova pipeline |
circleci pipeline run github/org/repo --branch develop |
Attiva pipeline su branch specifico |
circleci pipeline list github/org/repo |
Elenca pipeline recenti per un progetto |
circleci pipeline get <pipeline-id> |
Ottieni dettagli su una pipeline specifica |
circleci build list github/org/repo |
Elenca build recenti per un progetto |
circleci build get <build-number> |
Ottieni informazioni su una build specifica |
circleci build cancel <build-number> |
Annulla una build in corso |
| ## Utilizzo Avanzato |
| Comando | Descrizione |
|---|---|
circleci pipeline run github/org/repo --parameters '{"key":"value"}' |
Attiva pipeline con parametri |
circleci local execute --env VAR1=value1 --env VAR2=value2 |
Esegui localmente con variabili di ambiente |
circleci context list github org-name |
Elenca tutti i contesti per un'organizzazione |
circleci context create github org-name context-name |
Crea un nuovo contesto |
circleci context show github org-name context-name |
Mostra dettagli contesto |
circleci context delete github org-name context-name |
Elimina un contesto |
circleci context env-var list github org-name context-name |
Elenca le variabili di ambiente in un contesto |
circleci context env-var store github org-name context-name VAR_NAME |
Memorizza la variabile d'ambiente nel contesto |
circleci orb list |
Elenca tutti gli orbs pubblici disponibili |
circleci orb search <query> |
Cerca orbs per parola chiave |
circleci orb info namespace/orb@version |
Ottieni informazioni dettagliate su un orb |
circleci orb source namespace/orb@version |
Visualizza il codice sorgente di un orb |
circleci orb create namespace/orb |
Crea un nuovo orb |
circleci orb publish path/to/orb.yml namespace/orb@dev:first |
Pubblica versione di sviluppo di un orb |
circleci orb publish promote namespace/orb@dev:first patch |
Promuovi orb in produzione (versione patch) |
circleci orb validate path/to/orb.yml |
Convalida una configurazione orb |
circleci api graphql-query --query '{ me { id name } }' |
Esegui query dell'API GraphQL |
circleci api get /me |
Effettua una richiesta GET all'API REST |
circleci diagnostic |
Esegui controlli diagnostici sulla configurazione CLI |
circleci config pack src/ > orb.yml |
Raggruppa i file sorgente orb in un singolo YAML |
| ## Configurazione |
Struttura Base del File di Configurazione¶
Il file di configurazione di CircleCI si trova .circleci/config.ymlnella root del repository.
version: 2.1
# Define reusable execution environments
executors:
node-executor:
docker:
- image: cimg/node:18.16
resource_class: medium
working_directory: ~/project
# Define reusable command sequences
commands:
install-deps:
steps:
- restore_cache:
keys:
- v1-deps-{{ checksum "package-lock.json" }}
- run: npm ci
- save_cache:
key: v1-deps-{{ checksum "package-lock.json" }}
paths:
- node_modules
# Define jobs
jobs:
build:
executor: node-executor
steps:
- checkout
- install-deps
- run: npm run build
- persist_to_workspace:
root: .
paths:
- dist
test:
executor: node-executor
steps:
- checkout
- install-deps
- run: npm test
- store_test_results:
path: test-results
# Define workflows
workflows:
build-and-test:
jobs:
- build
- test:
requires:
- build
Configurazione Executor Docker¶
jobs:
build:
docker:
- image: cimg/python:3.11
auth:
username: $DOCKERHUB_USERNAME
password: $DOCKERHUB_PASSWORD
environment:
FLASK_ENV: development
- image: cimg/postgres:14.0
environment:
POSTGRES_USER: testuser
POSTGRES_DB: testdb
resource_class: large
steps:
- checkout
- run: python app.py
Configurazione Executor Machine¶
jobs:
build:
machine:
image: ubuntu-2204:2023.04.2
docker_layer_caching: true
resource_class: large
steps:
- checkout
- run: docker build -t myapp .
Utilizzo di Orbs¶
version: 2.1
orbs:
node: circleci/node@5.1.0
aws-cli: circleci/aws-cli@3.1.0
slack: circleci/slack@4.12.0
jobs:
deploy:
executor: node/default
steps:
- checkout
- node/install-packages
- aws-cli/setup
- run: npm run deploy
- slack/notify:
event: pass
template: success_tagged_deploy_1
Filtri Workflow e Pianificazione¶
workflows:
version: 2
build-deploy:
jobs:
- build
- test:
requires:
- build
- deploy:
requires:
- test
filters:
branches:
only:
- main
- /release\/.*/
tags:
only: /^v.*/
nightly:
triggers:
- schedule:
cron: "0 0 * * *"
filters:
branches:
only: main
jobs:
- test
Parallelismo e Suddivisione Test¶
jobs:
test:
docker:
- image: cimg/node:18.16
parallelism: 4
steps:
- checkout
- run: npm ci
- run:
name: Run Tests
command: |
TESTFILES=$(circleci tests glob "tests/**/*.test.js" | \
circleci tests split --split-by=timings)
npm test $TESTFILES
- store_test_results:
path: test-results
Classi di Risorse¶
jobs:
small-job:
docker:
- image: cimg/base:stable
resource_class: small # 1 vCPU, 2GB RAM
large-job:
docker:
- image: cimg/base:stable
resource_class: large # 4 vCPU, 8GB RAM
xlarge-job:
docker:
- image: cimg/base:stable
resource_class: xlarge # 8 vCPU, 16GB RAM
Casi d'Uso Comuni¶
Caso d'Uso 1: Pipeline Applicazione Node.js Multi-Stage¶
version: 2.1
orbs:
node: circleci/node@5.1.0
jobs:
build:
executor: node/default
steps:
- checkout
- node/install-packages:
pkg-manager: npm
- run:
name: Build Application
command: npm run build
- persist_to_workspace:
root: .
paths:
- dist
- node_modules
test:
executor: node/default
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Run Unit Tests
command: npm test
- store_test_results:
path: test-results
deploy-staging:
executor: node/default
steps:
- attach_workspace:
at: .
- run:
name: Deploy to Staging
command: npm run deploy:staging
workflows:
build-test-deploy:
jobs:
- build
- test:
requires:
- build
- deploy-staging:
requires:
- test
filters:
branches:
only: develop
Caso d'Uso 2: Build e Push Immagine Docker¶
version: 2.1
orbs:
docker: circleci/docker@2.2.0
jobs:
build-and-push:
executor: docker/docker
steps:
- setup_remote_docker:
docker_layer_caching: true
- checkout
- docker/check
- docker/build:
image: myorg/myapp
tag: ${CIRCLE_SHA1},latest
- docker/push:
image: myorg/myapp
tag: ${CIRCLE_SHA1},latest
workflows:
build-deploy:
jobs:
- build-and-push:
context: docker-hub-creds
filters:
branches:
only: main
Caso d'Uso 3: Test Paralleli con Suddivisione Test¶
version: 2.1
jobs:
test:
docker:
- image: cimg/python:3.11
parallelism: 8
steps:
- checkout
- run: pip install -r requirements.txt
- run:
name: Run Tests in Parallel
command: |
TESTFILES=$(circleci tests glob "tests/**/test_*.py" | \
circleci tests split --split-by=timings)
pytest $TESTFILES \
--junitxml=test-results/junit.xml \
--cov=app \
--cov-report=html
- store_test_results:
path: test-results
- store_artifacts:
path: htmlcov
workflows:
test:
jobs:
- test
Caso d'Uso 4: Workflow Condizionale con Parametri¶
version: 2.1
parameters:
run-integration-tests:
type: boolean
default: false
deployment-environment:
type: string
default: "staging"
jobs:
unit-test:
docker:
- image: cimg/node:18.16
steps:
- checkout
- run: npm ci
- run: npm run test:unit
integration-test:
docker:
- image: cimg/node:18.16
steps:
- checkout
- run: npm ci
- run: npm run test:integration
deploy:
docker:
- image: cimg/node:18.16
parameters:
environment:
type: string
steps:
- checkout
- run: npm ci
- run: npm run deploy:<< parameters.environment >>
workflows:
test-and-deploy:
jobs:
- unit-test
- integration-test:
when: << pipeline.parameters.run-integration-tests >>
- deploy:
environment: << pipeline.parameters.deployment-environment >>
requires:
- unit-test
filters:
branches:
only: main
Caso d'Uso 5: Monorepo con Filtraggio Percorsi¶
version: 2.1
setup: true
orbs:
path-filtering: circleci/path-filtering@0.1.3
workflows:
setup-workflow:
jobs:
- path-filtering/filter:
base-revision: main
config-path: .circleci/continue-config.yml
mapping: |
services/api/.* api-build true
services/web/.* web-build true
packages/.* all-build true
continue-config.yml:
version: 2.1
parameters:
api-build:
type: boolean
default: false
web-build:
type: boolean
default: false
all-build:
type: boolean
default: false
jobs:
build-api:
docker:
- image: cimg/node:18.16
steps:
- checkout
- run: cd services/api && npm ci && npm run build
build-web:
docker:
- image: cimg/node:18.16
steps:
- checkout
- run: cd services/web && npm ci && npm run build
workflows:
api-workflow:
when: << pipeline.parameters.api-build >>
jobs:
- build-api
web-workflow:
when: << pipeline.parameters.web-build >>
jobs:
- build-web
Migliori Pratiche¶
-
Utilizzare Orbs per Attività Comuni: Sfruttare gli orbs di CircleCI per integrazioni standardizzate (AWS, Docker, Slack) per ridurre la complessità di configurazione e l'onere di manutenzione.
-
Implementare Caching in Modo Strategico: Memorizzare le dipendenze utilizzando chiavi basate su checksum (
{{ checksum "package-lock.json" }}) per velocizzare le build garantendo l'invalidazione della cache quando le dipendenze cambiano. -
Ottimizzare le Classi di Risorse: Scegliere classi di risorse appropriate per ogni job; utilizzare istanze più piccole per attività semplici e riservare istanze più grandi per operazioni che richiedono calcoli intensivi come compilazione o test complessi.
-
Abilitare Docker Layer Caching: Per i job che costruiscono immagini Docker, abilitare
docker_layer_caching: trueper ridurre significativamente i tempi di build riutilizzando i layer invariati. -
Suddividere i Test per Esecuzione Parallela: Utilizzare
circleci tests splitcon--split-by=timingsper distribuire i test tra container paralleli in base ai tempi storici di esecuzione, massimizzando l'efficienza. -
Utilizzare Workspaces per Dati Inter-Job: Conservare gli artefatti di build utilizzando
persist_to_workspaceeattach_workspaceinvece di ricostruire nei job successivi, risparmiando tempo e garantendo coerenza. -
Implementare Filtri Workflow: Utilizzare filtri di branch e tag per controllare quando vengono eseguiti i job, prevenendo distribuzioni non necessarie e conservando i crediti pur mantenendo la sicurezza.
-
Archiviare Segreti nei Contesti: Gestire le credenziali sensibili nei contesti di CircleCI invece delle variabili di ambiente del progetto per una migliore sicurezza, controllo degli accessi e riutilizzabilità tra progetti.
-
Convalidare la Configurazione Localmente: Eseguire sempre
circleci config validatee testare i job localmente concircleci local executeprima di effettuare il push per individuare anticipatamente errori di sintassi e problemi di configurazione. -
Monitorare e Ottimizzare l'Utilizzo dei Crediti: Rivedere regolarmente Insights e Analytics per identificare job lenti, ottimizzare le impostazioni di parallelismo e ridurre l'esecuzione di workflow non necessari per gestire efficacemente i costi.
Risoluzione dei Problemi¶
| Problema | Soluzione |
|---|---|
| "Config file not found" error | Ensure .circleci/config.yml exists in repository root. Run circleci config validate to check file location and syntax. |
| Local execution fails with Docker errors | Verify Docker is running: docker ps. Ensure the CLI has access to Docker socket. On Linux, add user to docker group: sudo usermod -aG docker $USER. |
| "Invalid configuration" during validation | Run circleci config process .circleci/config.yml to see expanded config and identify syntax errors. Check YAML indentation (use spaces, not tabs). |
| Jobs not triggering on push | Verify project is followed: circleci follow github/org/repo. Check workflow filters aren't excluding your branch. Ensure webhook is configured in VCS settings. |
| Workspace attachment fails | Ensure persist_to_workspace in upstream job completes successfully. Verify root and paths match between persist and attach. Check job dependencies in workflow. |
| Cache not restoring | Verify cache key matches between save_cache and restore_cache. Use fallback keys: keys: [v1-{{ checksum "file" }}, v1-]. Check cache hasn't expired (30 days). |
| Authentication errors with CLI | Re-run circleci setup with a valid API token. Generate new token at https://app.circleci.com/settings/user/tokens. Verify token has correct permissions. |
| Parallel test splitting not working | Ensure test results are stored with store_test_results. Use glob patterns that match your test files. Verify parallelism is set greater than 1. |
| Out of memory errors | Increase resource_class to large or xlarge. Optimize memory-intensive operations. Check for memory leaks in application code. |
| Context environment variables not available | Verify job uses correct context in workflow: context: context-name. Check user has access to context in organization settings. Ensure variable names don't conflict. |
| Orb import fails | Verify orb exists: circleci orb info namespace/orb@version. Check version is valid. For private orbs, ensure organization has access and use --org-id flag. |