![Kubernetes微服务实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/59/32436059/b_32436059.jpg)
上QQ阅读APP看书,第一时间看更新
4.5.3 理解构建脚本
你可以到https://github.com/the-gigi/delinkcious/blob/master/build.sh下载build.sh构建脚本。
让我们一点一点地研究下脚本的内容,因为这里有很多最佳实践值得学习。首先,如果你知道脚本的具体位置,最好添加一行shebang来指明执行脚本的二进制代码的路径。如果你尝试编写可在不同平台上运行的跨平台脚本,则可能需要依赖路径变量或者其他技巧。通过命令set-eo pipefail设定,如果发生任何问题脚本将立即退出(即使处在流水线中)。
强烈建议将这些内容用于生产环境:
![](https://epubservercos.yuewen.com/0B378C/17517093206689306/epubprivate/OEBPS/Images/067-i.jpg?sign=1739315568-Sc4NAd3pPd4sbED6cOxjTltktptAqeST-0-453ccf004e9f97ab8dc8c6d6f3380011)
接下来的几行设置了目录的一些变量和Docker镜像的标签。这里有两个标签:STABLE_TAB和TAG。STABLE_TAG标签包含主要版本和次要版本,并且不会在每次构建中都更改。TAG标签包含CircleCI提供的CIRCLE_BUILD_NUM,并且在每次构建中都会递增,这意味着TAG始终是唯一的。上述方法被认为是对镜像进行标记和版本控制的最佳实践:
![](https://epubservercos.yuewen.com/0B378C/17517093206689306/epubprivate/OEBPS/Images/067-2-i.jpg?sign=1739315568-E7i2hBOs9QaeE4qA2oksVl0ImkB8liV4-0-4c44d8f3a48cee45b71f6a3e1b6e9ffb)
接下来命令切换到svc目录,这是所有服务的父目录,然后使用在CircleCI项目中设置的环境变量登录DockerHub。
![](https://epubservercos.yuewen.com/0B378C/17517093206689306/epubprivate/OEBPS/Images/067-3-i.jpg?sign=1739315568-MdV8gZBgBwnMA8PkrasWI3whkCvXDROL-0-4a1d796ac0a0ff9082e2646181953ad8)
现在,我们进入关键环节。该构建脚本会遍历svc目录的子目录以查找Dockerfile。如果找到Dockerfile,它将构建一个镜像,并使用服务名以及TAG和STABLE_TAG的组合对其进行标记,最后将镜像推送到仓库:
![](https://epubservercos.yuewen.com/0B378C/17517093206689306/epubprivate/OEBPS/Images/067-4-i.jpg?sign=1739315568-M4o4OEuGmgopbdx2qkM7bKgEMHsZ96tB-0-3f5e991549e3d528f0b81fcde03786c1)