gitlab에서 iOS 프로젝트의 CI 파이프라인을 설정합니다.일반 도메인 이름 형식

9036 단어 ciiosgitlab

개술

  • 사용.gitlab-ci.yml CI 파이핑 설정
  • 파이프 상태와 코드 커버율에 배지 추가
  • 선결 조건

  • Xcode와 Xcode 명령행 도구가 설치된 맥OS기계
  • 상기 맥OS 기기는 GitLab runner
  • 로 등록됨
  • 테스트 시나리오와 테스트 용례가 있는 iOS 응용 프로그램
  • 도구

  • bundler(선택 가능, 코코푸드/fastlane 등 루비에 의존성이 있다면)
  • jq(코드 덮어쓰기 보고서 처리에 사용 가능)
  • brew install jq
  • GitLab CI/CD의 주요 용어

  • Pipelines는 지속적인 통합, 제공 및 배포를 위한 최상위 수준의 구성 요소입니다.
  • Jobs는 달리기 선수가 실행하는 조작을 정의했다
  • Stages 작업이 언제 실행되는지 정의
  • 를 사용하여 CI 파이프를 설정합니다.gitlab ci。yml


    stages:
      - prebuild
      - build
    
    cache:
      key: ${CI_COMMIT_REF_SLUG}
      paths:
        - my-project-path/.bundle
        - my-project-path/vendor
    
    install_dependencies:
      stage: prebuild
      script:
        - unset cd
        - cd my-project-path
        - bundle config set --local deployment 'true'
        - bundle install
      tags:
        - macos_11-2-3
        - xcode_12-4
        - ios_14-4
    
    build_project:
      stage: build
      script:
        - unset cd
        - cd my-project-path
        - xcodebuild clean build test -project my-project.xcodeproj -scheme "CI" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
        - xcrun xccov view --report --json DerivedData/my-project-path/Logs/Test/*.xcresult > xcresult.json
        - cat xcresult.json | jq ".lineCoverage" -j | awk '{printf "XCTEST_COVERAGE=%0.2f%%\n",$1*100}'
      tags:
        - macos_11-2-3
        - xcode_12-4
        - ios_14-4
    
    

    구성 파일의 구조:


    1-3호선: 두 단계prebuildbuild를 포함하는 파이프를 정의했다
    5-9행: 작업 간에 캐시할 경로 정의
    11-21행: 정의install_dependencies 작업
    23-34행: 정의build_project 작업
    28행: Xcode 프로젝트 구축 및 테스트
    29-30줄: 코드 커버율 통계 데이터 수집

    캐시 작업 간의 의존 관계

  • my-project-path/.bundle 스토리지 번들 구성 중
  • my-project-path/.vendor 설치된gems
  • 를 저장하는 중
  • ${CI_COMMIT_REF_SLUG}는 프로젝트를 생성하는 지점이나 태그 이름
  • 이다.
    캐시가 없으면, 실행 prebuild 단계에서 build 단계에 설치된gems는 같은 기계에서 작업하더라도 삭제됩니다.
    이 예는 같은 지점에서 캐시를 공유합니다

    cd 사용이 설정되지 않았습니다.

    rvm를 사용하면 다음과 같이 cd 명령이 재정의됩니다.
    cd () 
    { 
        __zsh_like_cd cd "$@"
    }
    
  • 작업에서 cd 명령을 사용하면 ERROR: Build failed with: exit status 1를 던지고 바로 종료
  • unset cd 셸 내장 명령으로 리셋하기
  • 명령을 사용하기 전(예와 같이
  • 에 추가할 수 있습니다cd.
  • 또는 cd
  • 에 추가 가능

    기타 주의사항

  • .bash_profile는gitlab의 Runners 부분의 설정과 일치해야 한다.com->project settings->CI/CD
  • 파일tags은git 환매 협의
  • 의 루트 디렉터리에 넣어야 한다
  • DerivedData 경로는 Xcode 프로젝트
  • 에 비해 설정됨

    파이프 상태 및 코드 덮어쓰기에 배지 추가


    파이프 상태 ID



    파이핑 상태를 구성하려면 다음과 같이 하십시오.
  • gitlab.com->프로젝트 settings->General-> 확장 배지 부분
  • 다음과 같은 설정으로 배지를 추가합니다.
  • 이름: .gitlab-ci.yml
  • 링크: Pipeline Status
  • 배지 이미지 URL: https://gitlab.com/%{project_path}/-/commits/%{default_branch}

  • 코드 덮어쓰기 배지

  • 프로젝트 구축 후 JSON 형식의 코드 덮어쓰기 보고서 가져오기https://gitlab.com/%{project_path}/badges/%{default_branch}/pipeline.svg
  • 작업 로그에 코드 덮어쓰기 범위 인쇄xcrun xccov view --report --json DerivedData/my-project/Logs/Test/*.xcresult > xcresult.json
  • 위 줄은요.
  • JSON
  • 에서 가져오기cat xcresult.json | jq ".lineCoverage" -j | awk '{printf "XCTEST_COVERAGE=%0.2f%%\n",$1*100}' 필드
  • 값을 100
  • 에 곱하기
  • 값을 백분율로 변환
  • 소수점 뒷자리 두 자리 인쇄
  • 테스트 커버율 해석에는 백분율 번호lineCoverage가 포함되어야 합니다.
  • 단계 2에서 테스트 덮어쓰기 해석 정규 표현식을grep 결과로 설정합니다.
  • gitlab.com->프로젝트 settings->CI/CD->공통 파이프 부분 확장
  • 테스트 범위의 해석에 %
  • 를 기입한다.
  • 배지와 유사한 파이프 상태 추가
  • gitlab.com->프로젝트 settings->General-> 확장 배지 부분
  • 다음과 같은 설정으로 배지를 추가합니다.
  • 이름: XCTEST_COVERAGE=(\d+.\d+%)
  • 링크: Code Coverage
  • 배지 이미지 URL: https://gitlab.com/%{project_path}/-/commits/%{default_branch}
  • 도구책


    콘셉트

  • https://docs.gitlab.com/ee/ci/pipelines/
  • 프로비저닝

  • https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
  • https://stackoverflow.com/questions/41497356/code-coverage-for-swift-3-0-project-in-gitlab-ci
  • 캐시 작업 간의 의존 관계

  • https://docs.gitlab.com/ee/ci/caching/
  • 배지

  • https://docs.gitlab.com/ee/user/project/badges.html
  • https://docs.gitlab.com/ee/ci/pipelines/settings.html#test-coverage-parsing
  • https://docs.gitlab.com/ee/ci/pipelines/settings.html#test-coverage-report-badge
  • https://unix.stackexchange.com/questions/113515/how-to-modify-output-in-bash-command-pipeline
  • https://unix.stackexchange.com/questions/131013/formatting-numbers-using-awk-print
  • https://stackoverflow.com/questions/3272215/bash-how-to-perform-arithmetic-on-numbers-in-a-pipe
  • 문제 해결

  • 오류: 생성 실패, 종료 상태 1
  • https://gitlab.com/gitlab-org/gitlab-runner/-/issues/114
  • https://juejin.cn/post/6844903553970995207
  • https://stackoverflow.com/questions/49444879/gitlab-ci-runner-job-failed-exit-status-1-when-changing-directory/54471745#54471745
  • 좋은 웹페이지 즐겨찾기