![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=1739526901-dlsEJ2vKV8QcTcjRkrjT5EpjcLzhqPrs-0-f82490ff3f1c5333dbd987a1d98d5dd4)
接下来的几行设置了目录的一些变量和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=1739526901-F3drxDrwOZBLsZHwQVzlVzoIp8NOR9RM-0-4ae6fe1d209126aa0b2dae96746268bc)
接下来命令切换到svc目录,这是所有服务的父目录,然后使用在CircleCI项目中设置的环境变量登录DockerHub。
![](https://epubservercos.yuewen.com/0B378C/17517093206689306/epubprivate/OEBPS/Images/067-3-i.jpg?sign=1739526901-HBJA6uN2bKPR9OAaf9Ee97ZcHMvVmyuD-0-4bde5d0171a00767121e1af781d2761d)
现在,我们进入关键环节。该构建脚本会遍历svc目录的子目录以查找Dockerfile。如果找到Dockerfile,它将构建一个镜像,并使用服务名以及TAG和STABLE_TAG的组合对其进行标记,最后将镜像推送到仓库:
![](https://epubservercos.yuewen.com/0B378C/17517093206689306/epubprivate/OEBPS/Images/067-4-i.jpg?sign=1739526901-BUBE2cgcz551INPuWczReczeJ2h5KzGw-0-a63db0f33e126fa71a77207253d1a650)