ShellScript 개발의 CI 도입에 사용할 수 있는 툴 정리(CI 설정 완료 샘플 있음)
10388 단어 Bash시CircleCI2.0batsshellcheck
다음 도구를 사용합니다.
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으로 명령을 실행하면 다음 변수에 값이 설정됩니다.
#!/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
이러한 변수를 검증에 사용할 수 있습니다.
#!/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.shls -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.ymlversion: 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
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...
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ぉg. 코m/엔트리/2018/05/14/000633
Reference
이 문제에 관하여(ShellScript 개발의 CI 도입에 사용할 수 있는 툴 정리(CI 설정 완료 샘플 있음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naotospace/items/38b28705a05ab7bf78be텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)