ShellScript 개발의 CI 도입에 사용할 수 있는 툴 정리(CI 설정 완료 샘플 있음)

Shell Script 개발에 사용할 수있는 CI 구성에 대해 요약했습니다

다음 도구를 사용합니다.
  • 컴포넌트 테스트(유닛 테스트): htps : // 기주 b. 이 m / s s p pengson / 바 ts
  • 정적 분석: htps : // 기주 b. 코 m / 코아 만 / 쉬 ㅇ l 치 CK
  • CircleCI

  • CI 설정 포함 샘플 코드는 이쪽 -> htps : // 기주 b. 코 m / 나 070 / sh - 시 mp ぇ

    bats



    bats은 셸 스크립트 및 명령 줄 도구 용 테스트 프레임 워크입니다.

    설치



    htps : // 기주 b. 코 m / 바 ts - 이것 / 바 ts - 이것 # Ins을 참조하십시오.

    사용법



    @test



    테스트 케이스는 @test ~로 설명을 시작합니다.

    test/sample.bats
    #!/usr/bin/env bats
    
    @test "addition using bc" {
      result="$(echo 2+2 | bc)"
      [ "$result" -eq 4 ]
    }
    

    디렉토리 또는 파일명 지정으로 실행합니다.
    bats test/ # or bats test/sample.bats
     ✓ addition using bc
    
    1 tests, 0 failures
    

    실행



    Many Bats tests need to run a command and then make assertions about its exit status and output. Bats includes a run helper that invokes its arguments as a command, saves the exit status and output into special global variables, and then returns 0 status code so you can continue to make assertions in your test case.

    많은 Bats 테스트에서는 명령을 실행하여 종료 상태와 출력에 대해 어설션을 수행해야 합니다. Bats에는 인수를 명령으로 호출하고 종료 상태와 출력을 특수 전역 변수에 저장 한 다음 0의 상태 코드를 반환하는 실행 도우미가 포함되어 있으므로 테스트 케이스에서 어설 션을 계속할 수 있습니다. . ~ google 번역 ~

    run으로 명령을 실행하면 다음 변수에 값이 설정됩니다.
  • $status : 종료 상태 코드
  • $output : 표준 출력·표준 에러 출력을 연결한 것
  • $lines: 출력을 배열로 저장. 참조하기 쉽다

  • 이러한 변수를 검증에 사용할 수 있습니다.
    #!/usr/bin/env bats
    
    @test "invoking ls with a nonexistent file prints an error" {
      run ls hoge
      [ "$status" -eq 1 ]
      [ "$output" = "ls: hoge: No such file or directory" ]
    }
    
    @test "invoking mkdir without arguments prints usage" {
      run mkdir
      [ "$status" -eq 64 ]
      [ "${lines[0]}" = "usage: mkdir [-pv] [-m mode] directory ..." ]
    }
    

    로드



    환경 변수와 테스트 픽스처를 bats 테스트 코드 이외의 파일에서 읽습니다.

    test/test_helper.bash
    SUCCESS_CODE=0
    

    test/sample.bats
    #!/usr/bin/env bats
    
    load test_helper
    
    @test "assert with global variable" {
      run ls -la
      [ "$status" -eq "$SUCCESS_CODE" ]
    }
    

    setup/teardown



    각 케이스의 전후에 실시하는 공통 처리를 정의합니다.
    #!/usr/bin/env bats
    
    setup(){
      mkdir test/hoge
      touch test/hoge/fuga.txt
    }
    teardown(){
      rm -rf test/hoge
    }
    

    shellcheck



    shellcheck은 Shell 스크립트 용 Lint 도구입니다.

    설치



    htps : // 기주 b. 코 m / 코아 만 / 쉬 ㅇ l ぇ CK을 참조하십시오.

    실행 방법



    lib/sample.sh
    ls -ltra
    
    shellcheck lib/sample.sh
    
    In lib/sample.sh line 1:
    ls -ltra
    ^------^ SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
    
    For more information:
      https://www.shellcheck.net/wiki/SC2148 -- Tips depend on target shell and y...
    

    나쁜 코드 예



    아래 내용에 해당하면 체크 NG가 됩니다.
    htps : // 기주 b. 코 m / 코아 만 / 쉬 ㅇ l ぇ CK # ぇ ry - f-d



    Editor로 자동 체크하도록 해 두면 FB 루프가 빨라지므로 효율적으로 된다고 생각합니다.

    htps : // 기주 b. 코 m / 코아 만 / ぇ ぇ ぇ CK # 니 - r r ぢ r
    - Vim, through ALE , Neomake , or Syntastic
    - Emacs, through Flycheck or Flymake
    - Sublime, through SublimeLinter
    - Atom, through 린터
    - VSCode, through vscode-shellcheck

    CI 환경 구축



    circle ci에서 실행합니다.
    각각 docker image가 준비되어 있기 때문에 간단합니다.

    .circleci/config.yml
    version: 2
    jobs:
      component-testing:
        docker:
          - image: bats/bats:latest
        steps:
          - checkout
          - run: bats ./test/
      lint:
        docker:
          - image: koalaman/shellcheck-alpine
            # Dockerfileのentrypoint実行によって
            # circleci上ではうまくビルドできないので空文字で上書きます
            entrypoint: '' 
        steps:
          - checkout
          - run: shellcheck ./lib/*
    
    workflows:
      version: 2
      component-test-and-lint:
        jobs:
          - component-testing
          - lint
    

    이제 push 할 때마다 자동 실행됩니다.

    Reference


  • htps : // 기주 b. 이 m / s s p pengson / 바 ts
  • htps : // 기주 b. 코 m / 코아 만 / 쉬 ㅇ l 치 CK

  • htps : // 걸려. 하테나 bぉg. 코m/엔트리/2018/05/14/000633
  • h tps:// 퀵했다. 소 m/5t111111/있어 MS/C4아 382c7っd896c353D03
  • 좋은 웹페이지 즐겨찾기