Eco CI
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
Eco CI는 GitLab CI/CD 파이프라인과 통합되는 서드파티 도구입니다. Eco CI는 CI/CD 파이프라인의 에너지 소비와 탄소 배출을 측정하는 오픈소스 도구입니다. 파이프라인 job의 명령어 앞뒤에 측정 스크립트를 배치합니다.
Eco CI는 GitLab CI/CD 파이프라인과 통합되는 서드파티 도구입니다. GitLab은 이 도구를 유지 관리하거나 지원을 제공하지 않으며, 이 도구가 규제 또는 컴플라이언스 요구사항을 충족한다는 것을 보장하지 않습니다.
Eco CI는 CI/CD 파이프라인의 에너지 소비와 탄소 배출을 측정하는 오픈소스 도구입니다. 파이프라인 job 내에서 경량 bash 스크립트로 실행되며, 별도의 서버나 데이터베이스가 필요하지 않습니다.
파이프라인 job의 명령어 앞뒤에 측정 스크립트를 배치합니다. 이 도구는 명령어 실행 중 CPU 사용률을 모니터링하고, SPECpower 데이터베이스에서 미리 계산된 전력 곡선을 사용하여 에너지 소비를 계산합니다. 모든 측정 결과를 텍스트 파일로 저장하며, job 아티팩트로 저장하여 다운로드하고 볼 수 있습니다. 역사적 분석을 위해 외부 대시보드로 결과를 전송할 수도 있습니다.
파이프라인에 Eco CI 추가#
job 실행 중 에너지 소비와 탄소 배출을 측정하기 위해 파이프라인에 Eco CI를 추가합니다.
Eco CI는 ECO_CI_LABEL 변수를 사용하여 측정값을 식별하고 그룹화하므로,
프로젝트 또는 파이프라인 Stage를 나타내는 설명적인 이름을 선택하세요.
기본적으로 측정 데이터는 분석을 위해 Green Coding Solutions 대시보드로 전송되지만,
ECO_CI_SEND_DATA를 false로 설정하여 로컬에만 결과를 저장할 수 있습니다.
사전 요구사항:
- bash 지원이 있는 러너에서 실행되는 파이프라인 job.
curl,jq,awk,bash,git,coreutils유틸리티가 있는 러너 환경.
파이프라인에 Eco CI를 추가하려면:
-
.gitlab-ci.yml파일에 Eco CI 템플릿을 포함하고 프로젝트 식별자를 구성합니다:variables: ECO_CI_LABEL: "my-project-pipeline" ECO_CI_SEND_DATA: "false" include: - remote: 'https://raw.githubusercontent.com/green-coding-solutions/eco-ci-energy-estimation/main/eco-ci-gitlab.yml' -
job에 측정 스크립트를 추가합니다:
build-job: image: node:alpine before_script: - apk add --no-cache curl jq gawk bash git coreutils script: - !reference [.start_measurement, script] - npm install - npm run build - npm test - !reference [.get_measurement, script] - !reference [.display_results, script] artifacts: paths: - eco-ci-output.txt - metrics.txt expire_in: 1 week -
선택 사항. 명령어를 별도로 측정하려면 각 명령어에 측정 스크립트를 사용합니다:
build-job: image: node:alpine before_script: - apk add --no-cache curl jq gawk bash git coreutils script: - !reference [.start_measurement, script] - npm install - !reference [.get_measurement, script] - !reference [.display_results, script] - !reference [.start_measurement, script] - npm run build - !reference [.get_measurement, script] - !reference [.display_results, script] - !reference [.start_measurement, script] - npm test - !reference [.get_measurement, script] - !reference [.display_results, script] artifacts: paths: - eco-ci-output.txt - metrics.txt expire_in: 1 week
측정 결과 보기#
Eco CI는 GitLab 인터페이스를 통해 접근할 수 있는 job 아티팩트에 측정 결과를 저장합니다. 측정 결과에는 다음이 포함됩니다:
- 에너지 소비: 줄(joule) 및 와트(watt)로 표시
- 탄소 배출: CO₂ 환산 그램(gCO₂eq)으로 추정된 배출량
- 지속 시간: 측정 기간의 길이(초)
- CPU 사용률: 측정 중 평균 CPU 사용량
- 소프트웨어 탄소 강도(SCI): 파이프라인 실행당 탄소 배출량
측정 결과를 보려면:
- 파이프라인으로 이동합니다.
- Eco CI 측정이 포함된 job을 선택합니다.
- job 세부 정보에서 Job artifacts 아래의 Browse를 선택합니다.
eco-ci-output.txt파일을 엽니다.
출력 예시:
"build-job: Label: my-project-pipeline: Energy Used [Joules]:" 5.82
"build-job: Label: my-project-pipeline: Avg. CPU Utilization:" 22.69
"build-job: Label: my-project-pipeline: Avg. Power [Watts]:" 1.91
"build-job: Label: my-project-pipeline: Duration [seconds]:" 3.04
----------------
"build-job: Energy [Joules]:" 5.82
"build-job: Avg. CPU Utilization:" 22.69
"build-job: Avg. Power [Watts]:" 1.91
"build-job: Duration [seconds]:" 3.04
----------------
🌳 CO2 Data:
CO₂ from energy is: 0.001944 g
CO₂ from manufacturing (embodied carbon) is: 0.000442 g
Carbon Intensity for this location: 334 gCO₂eq/kWh
SCI: 0.002386 gCO₂eq / pipeline run emitted
대시보드 통합#
ECO_CI_SEND_DATA를 true로 설정하면 측정 데이터가 자동으로
Eco CI 메트릭 대시보드로 전송됩니다.
대시보드는 과거 기록, 트렌드 분석 및 파이프라인 실행 간 비교를 제공합니다.
기본적으로 대시보드는 공개되어 있으며 누구든지 볼 수 있습니다.
시간에 따른 에너지 소비 트렌드, 탄소 배출 패턴을 확인하고,
다양한 브랜치, 커밋 또는 시간 기간에 걸친 측정값을 비교할 수 있습니다.
프로젝트의 ECO_CI_LABEL 식별자로 대시보드에 접근합니다.
프로젝트에 배지 추가#
프로젝트의 README.md 파일에 Eco CI 배지를 표시하여 에너지 소비 메트릭을 보여줄 수 있습니다.
사전 요구사항:
ECO_CI_SEND_DATA가true로 설정되어 있어야 합니다.- Eco CI가 활성화된 상태에서 최소 하나의 파이프라인이 성공적으로 실행되었어야 합니다.
README.md 파일에 배지를 추가하려면:
-
다음 내용을 복사하여
README.md파일에 붙여넣습니다:[](https://metrics.green-coding.io/ci.html?repo=<namespace>/<project>&branch=<branch>&workflow=<project-id>) -
플레이스홀더를 바꿉니다:
<namespace>/<project>를 GitLab 프로젝트 경로로 변경합니다 (예:mygroup/myproject)<branch>를 브랜치 이름으로 변경합니다 (예:main)<project-id>를 GitLab 프로젝트 ID로 변경합니다 (예:52215136)
예시:
[](https://metrics.green-coding.io/ci.html?repo=lyspin/eco-ci-demo&branch=main&workflow=52215136)
문제 해결#
Eco CI를 사용할 때 다음과 같은 문제가 발생할 수 있습니다.
오류: Date has returned a timestamp that is not accurate to microseconds#
다음과 같은 오류 메시지가 발생할 수 있습니다:
ERROR: Date has returned a timestamp that is not accurate to microseconds! You may need to install `coreutils`.
이 문제는 Alpine Linux 또는 기본적으로 GNU coreutils가 포함되지 않은 다른 최소 배포판을 사용할 때 발생합니다.
이 문제를 해결하려면 coreutils를 설치하세요. 예를 들어 Alpine의 경우:
before_script:
- apk add --no-cache coreutils
아티팩트에 측정 데이터가 나타나지 않음#
job 아티팩트에서 eco-ci-output.txt 파일이 보이지 않습니다.
이 문제는 아티팩트 구성이 누락되어 발생할 수 있으므로,
job에 올바른 artifacts 구성이 포함되어 있는지 확인하세요:
artifacts:
paths:
- eco-ci-output.txt
- metrics.txt
측정값이 에너지 소비량 0을 표시#
eco-ci-output.txt 파일에 Energy [Joules]: 0.00과 같은 값이 표시됩니다.
이 문제는 측정 스크립트가 잘못 배치되었을 때 발생합니다.
이 문제를 해결하려면 측정 스크립트가 CPU 집약적인 명령어를 둘러싸고 있는지 확인하세요:
script:
- !reference [.start_measurement, script]
- npm install # CPU-intensive command
- npm run build # CPU-intensive command
- !reference [.get_measurement, script]
- !reference [.display_results, script]
