使用Shell脚本

本文档介绍最佳做法,在使用shell脚本您CircleCI配置在以下几个部分:

概观

配置CircleCI经常需要编写shell脚本。虽然shell脚本可以在您的构建授予更精细的控制,那就是同样能够产生细微的错误微妙的艺术。您可以通过查看最佳实践说明如下避免许多这样的错误。

Shell脚本最佳实践

使用ShellCheck

ShellCheck是一个shell脚本静态分析工具,为警告和建议的bash / sh的shell脚本。

使用Shellcheck orb为增加shellcheck以最简单的方式你版本:2.1配置(记得要更换x.y.z有一个有效的版本):

2.1球体shellcheckcircleci/shellcheck@x.y.z工作流检查建造职位-shellcheck /检查宝珠必要因此没有进一步的配置中的#定义工作-使工作要求-shellcheck /检查#只运行集结工作一度shellcheck已经跑过滤器分支机构只有#只运行在主分支集结工作职位使工作...

另外,如果您使用的是版本2配置,则可以在不使用orb的情况下配置shell检查:

2职位shellcheck搬运工人-图片koalaman / shellcheck高山:稳定身份验证用户名mydockerhub用户密码DOCKERHUB_PASSWORD美元#背景/项目UI ENV-VAR参考步骤-查看-名称检查脚本命令|找 。型的F -name '* .SH' |厕所-l找 。型的F -name '* .SH' |xargs的shellcheck --external来源使工作...工作流2检查建造职位-shellcheck-使工作要求-shellcheck#只运行集结工作一度shellcheck已经跑过滤器分支机构只有#只运行在主分支集结工作

注意:使用时要小心集-o X跟踪/集-x与ShellCheck。当shell扩展秘密的环境变量,他们将在一个不那么秘密的方式暴露出来。在下面的例子中,观察如何tmp.sh脚本文件透露太多。

>tmp.sh# ! / bin / sh- onounset- oerrexit- oX跟踪如果[- z$ {SECRET_ENV_VAR: - - - - - -}];然后回声“你必须设置SECRET_ENV_VAR!”科幻>SH tmp.sh +“(”- z“”“]”+回声“您必须设置SECRET_ENV_VAR!”你必须SECRET_ENV_VAR !>SECRET_ENV_VAR=“s3cr3t !”SH tmp.sh +“(”- z“s3cr3t !”“]”

设置错误标志

有几个错误标志可以设置为在出现不利条件时自动退出脚本。作为一种最佳实践,在每个脚本的开头添加以下标志,以保护您自己避免出现棘手的错误。

#!的/ usr / bin中/ env的庆典#退出脚本,如果您尝试使用未初始化的变量。- onounset#如果语句返回一个非真实的返回值退出脚本。- oerrexit使用第一个失败的错误状态,而不是管道中最后一个项目的错误状态。- opipefail

也可以看看

如需更详细的说明和附加技术,见这篇博客文章在编写健壮的shell脚本。