4.5.3 理解构建脚本

你可以到https://github.com/the-gigi/delinkcious/blob/master/build.sh下载build.sh构建脚本。

让我们一点一点地研究下脚本的内容,因为这里有很多最佳实践值得学习。首先,如果你知道脚本的具体位置,最好添加一行shebang来指明执行脚本的二进制代码的路径。如果你尝试编写可在不同平台上运行的跨平台脚本,则可能需要依赖路径变量或者其他技巧。通过命令set-eo pipefail设定,如果发生任何问题脚本将立即退出(即使处在流水线中)。

强烈建议将这些内容用于生产环境:

接下来的几行设置了目录的一些变量和Docker镜像的标签。这里有两个标签:STABLE_TAB和TAG。STABLE_TAG标签包含主要版本和次要版本,并且不会在每次构建中都更改。TAG标签包含CircleCI提供的CIRCLE_BUILD_NUM,并且在每次构建中都会递增,这意味着TAG始终是唯一的。上述方法被认为是对镜像进行标记和版本控制的最佳实践:

接下来命令切换到svc目录,这是所有服务的父目录,然后使用在CircleCI项目中设置的环境变量登录DockerHub。

现在,我们进入关键环节。该构建脚本会遍历svc目录的子目录以查找Dockerfile。如果找到Dockerfile,它将构建一个镜像,并使用服务名以及TAG和STABLE_TAG的组合对其进行标记,最后将镜像推送到仓库: