

老瓶装新酒--使用makefile优化你的工作流
source link: https://guonaihong.github.io/post/using-makefile-to-manage-your-workflow/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Makefile
主要出现在c/c++
的项目居多,用来管理c/c++
的编译依赖。
这里的用法有点非主流的感觉,但是经过本人的实践。用好Makefile
可以事半功倍。
一、演示创建一个docker容器的过程
这里只是为了演示工作流程,所以对docker
命令的介绍会一带而过。
下面给一个微服务,做个docker镜像。并启动这个容器。
1.准备一个虚拟的服务
env CGO_ENABLED=0 go build main.go
- 源码 你可以看到这个虚拟服务只是打印一句话就退出,这个虚拟服务替换成你的业务服务
package main
import (
"fmt"
)
func main() {
fmt.Printf("vim-go")
}
2.创建docker镜像
alpine
是docker里面比较mini的镜像,大约4MB
左右,特别适合把服务拆得很散。
ubuntu
镜像占100-200MB
的样子。来个7-8个微服务。啥也不干,第一次pull 1G空间都没了。
如果docker registry和项目开发不在一个网段,中间使用外网通信。上传,下载的时间也相当可观。
使用alpine
大约可以节省10x
等待时间。
FROM alpine:3.7
RUN mkdir -p /opt/service
COPY ./main /opt/service
COPY ./start.sh /opt/service
WORKDIR /opt/service
CMD ["./start.sh"]
FROM
使用alpine:3.7
基础镜像构建自己的镜像RUN
运行shell命令COPY
本地文件拷贝到镜像里面WORKDIR
设置镜像工作目录,下面的CMD
命令都没有使用绝对路径/opt/service
就可以执行start.sh
命令, 就是这个指令的作用CMD
类似编程语言的main
函数。入口指令
3. start.sh
内容
使用start.sh
包裹服务启动脚本,是为了把经常变的部分放到start.sh
里面。不变的部分放到Dockerfile
里面维护。
debug
的时候,就发现这个方式比CMD直接放启动命令好多了。
./main
4.编译容器
sudo docker build -t demo:v1 .
5.运行容器
sudo docker run --net=host --name demo_v1 -d demo:v1
6.删除容器
没问题,就不同删除容器
sudo docker rm demo_v1
7.删除镜像
没问题,就不同删除镜像
sudo docker rmi demo:v1
二、优化工作流
如果上面的脚本一遍过,基本也不需要优化工作流,如果一次不成功,遇到疑难杂症。来来回回几次
(删除,创建,运行)。
就要吐了。 遇到这种情况,大家第一个反应是使用bash
优化流程。先来个switch case
骨架代码,他接受不同参数,运行不同子命令
# 文件名 workflow.sh
#!/bin/sh
case "$1" in
"build" )
echo $1
;;
"reset.docker" )
echo $1
;;
"build.docker" )
echo $1
;;
"run.docker" )
echo $1
;;
esac
sh workflow.sh build
好了,把上面的docker命令,移动到 workflow.sh脚步里面,加速工作流
三、优化工作流
如果你对第二步已经满足就不用看第三步。第二步要写switch case
骨架代码。有没有一种方式,原生支持多入口子命令执行。答:Makefile
ok。现在使用Makefile重构上面的shell脚本。
export GOPROXY=https://goproxy.cn
export GO111MODULE=on
# 模拟-编译go服务
build:
echo "这里放编译命令,同理下面也是"
# 清理,重新创建
reset.docker: clean.docker build.docker
# docker build list clean
build.docker:
# 运行
run.docker:
# 删除容器和镜像
clean.docker: clean.container clean.images
# 删除镜像
clean.images:
# 删除容器
clean.container:
make -f workflow.make build
Makefile
不仅完成第二步内容,还支持命令组合。比如上面的reset.docker
命令,就是先执行clean.docker
后执行build.docker
当然,这里为了演示使用workflow.make
文件名,如果使用默认Makefile
文件名是不需要make -f
指定Makefile
脚本文件,直接make build
就可以。
github 源码位置
https://github.com/guonaihong/go-example/tree/main/docker-alpine
Recommend
-
36
来源:中国新闻周刊喝瓶装水会咽下塑料颗粒,到底致不致癌?科学家对11个知名品牌的259瓶瓶装水进行了测试,发现几乎所有的瓶装水中都含有塑料微粒。喝的是瓶装水,咽下的是塑料颗粒记者/杨智杰本文首发于总第846期《中国新闻周刊》随着人们更多地追
-
16
快乐肥宅水火遍全球,但几乎全世界人都认为瓶装、罐装、玻璃装的可乐味道并不相同,并且罐装的可乐比瓶装的更好喝。尽管可乐公司已经一再声明可乐的配方并没有改变,根据研究,包装不同会改变可乐的味道,包装的密封性和透明度都将影响口感。
-
9
辞别旧岁,预鉴新酒 川酒集团举行国酿新品上市品鉴会 来源:深蓝财经 浏览:5998 2021-12-31 15:40:17 12月30日,川酒集团在成都举行全新大单品国酿媒体新品上市品鉴会,邀约50余家媒体...
-
10
Supercell新游《Clash Quest》到底是三消大创新,还是老瓶装新酒? 2022-02-23 •...
-
5
“卷”进瓶装饮料赛道,新式茶饮会好过吗? 2022-05-04 07:55:31...
-
7
6.18真快乐APP“超级品类日”启动 百事可乐300ml12瓶装低至19.9元-品玩 6.18真快乐APP“超级品类日”启动 百事可乐300ml12瓶装低至19.9元 7小时前 折扣有力度,福利享不停!今年的6.18年中大促,你入手了多...
-
4
瓶装凉茶卖19.9块,凉茶界也有刺客?-36氪瓶装凉茶卖19.9块,凉茶界也有刺客?超人测评·2022-07-07 12:47夏天到了,喝点降火清...
-
8
喜茶瓶装周年庆,也开始走洗脑路线?! 作者: Emily ...
-
3
原标题:喜茶:年轻人不做选择!要低糖更要好喝!《要低糖更要好喝》这个概念好敢要啊,我要我要我还要一切要从我们接到喜茶brief说起,喜茶瓶装线在去年逐个整活之后,今年又更新了统一的价值理念:【要低...
-
2
报告 | PET塑料瓶装饮料被检测出超标致癌化学物,问题出在哪?
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK