使用Makefile对多个shell命令进行编排

一、背景

在日常运维过程中,我们都会需要写大量的shell命令,如果是工程相对复杂的话,shell命令往往会封装为函数,交由主函数按需调用。
本文将引入Makefile来对复杂shell命令进行封装,让其变得易读易懂。

下面以一个构建Dockerfile的shell命令为示例

二、构建自定义docker镜像

1、编写你自己的Dockerfile

这里略去,不是本文的重点。

2、编写build.sh命令进行构建并推送镜像

IMAGE_BASE=xxx
IMAGE_NAME=user-service
IMAGE_VERSION=2.4.0#构建本地docker镜像
docker build -t ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION} .#测试构建的docker镜像
#docker run -it --name ${IMAGE_NAME} -p 9033:9033 ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}#对构建的docker镜像打标签
#docker tag ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION} 192.168.5.6:8086/${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}#登录docker私有仓库
#docker login 192.168.5.6:8086 -u admin -p 123456#推送本地构建的docker镜像到私有仓库
#docker push 192.168.5.6:8086/${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}

可以看到,这里有许多注释,因为上述的shell命令并不是一次性先后执行的,而是在不同的阶段,执行不同的命令。

下面就把上面的shell命令改为Makefile。

3、Makefile

IMAGE_BASE=xxx
IMAGE_NAME=user-service
IMAGE_VERSION=2.4.0
# 默认执行build
all: build#构建本地docker镜像
build:docker build -t ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION} .#测试构建的docker镜像
test:docker run -it --name ${IMAGE_NAME} -p 9033:9033 ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}#对构建的docker镜像打标签
tag:docker tag ${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION} 192.168.5.6:8086/${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}#登录docker私有仓库
login:docker login 192.168.5.6:8086 -u admin -p 123456#推送本地构建的docker镜像到私有仓库        
push:docker push 192.168.5.6:8086/${IMAGE_BASE}/${IMAGE_NAME}:${IMAGE_VERSION}

使用示例

  • make 与下面的make build一样
  • make build
  • make test 在未推送到仓库前,测试构建的本地镜像
  • make tag
  • make login 可能需要登录
  • make push

在这里插入图片描述
docker tag 给镜像打标签,见上一行
docker build 构建镜像,见下一行

Dockerfile和build.sh、Makefile存放在同一目录下。

当然,执行make命令也是在该目录下。

在这里插入图片描述

三、总结

编写Makefile文本的时候,注意每行命令前必须是TAB键,而非空格键。
由于本示例也存粹是对Makefile的入门,想要突出的是其对shell命令编排的使用好处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/487121.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】 login命令使用

login命令 在 Linux 中用于创建一个新的会话,并在新会话中登录用户。这个命令通常在终端中自动执行,当你打开一个新的终端会话或者通过 SSH 远程连接到 Linux 服务器时。 在命令后面附加欲登入的用户名称,它会直接询问密码,等待…

美国指控著名安全厂商Avast 向广告商出售用户浏览数据

据SecurityWeek消息,著名安全厂商Avast 被美国联邦贸易委员会 (FTC) 指控通过其浏览器扩展和防病毒软件收集消费者网络浏览数据,并在没有充分通知和未经消费者同意的情况下出售这些数据。 FTC计划对 Avast 处以 1650 万美元的罚款,并责令停止…

comfyui节点编写示例文件(下)

** 1、先看示例文件的结构 ** ** 2、设置输入参数 ** ** 3、节点指定任务、输出啥 ** ** 4、这个节点干了啥,定义函数、输出结果 ** ** 5、多个节点,就多个类 ** ** 6、设置多个入口 ** ** 7、放置 ** 直接把py文件放到 .\Co…

Unity中URP实现水效果(水的深度)

文章目录 前言一、搭建预备场景1、新建一个面片,使其倾斜一个角度,来模拟水底和岸边的效果2、随便创建几个物体,作为与水面接触的物体3、再新建一个面片,作为水面 二、开始编写水体的Shader效果1、新建一个URP基础Shader2、把水体…

视频评论挖掘软件|抖音视频下载工具

针对抖音视频下载的需求,我们开发了一款功能强大的工具,旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索,实现自动批量抓取视频,并根据需要进行选择性批量下载。因此&#…

<Linux> 可重入函数 volatile关键字 以及SICHLD信号

目录 一、可重入函数 (一)引入 (二)可重入函数的判断 二、volatile关键字 (一)概念 (二)关于编译器的优化的简单讨论 三、SIGCHLD信号 一、可重入函数 (一&#…

PostgreSQL如何使用UUID

离线安装时,一般有四个包,都安装的话,只需要开启uuid的使用即可,如果工具包(即 postgresql11-contrib)没有安装的话,需要单独安装一次,再进行开启。 开启UUID方法 下面介绍一下如何开启&#…

Stable Diffusion 3震撼发布模型与Sora同架构

Prompt:Epic anime artwork of a wizard atop a mountain at night casting a cosmic spell into the dark sky that says "Stable Diffusion 3" made out of colorful energy Stability AI发布Stable Diffusion 3文本到图像模型。该模型采用扩散变换架构…

java-kotlin踩坑:错误:找不到符号(点击能跳转到对应类中)

问题描述: 在android用java调用一个kotlin定义的类时,导包正常,点击也能跳转到对应类中,但是在编译运行时会报错,提示找不到符号 解决方法: 第一步:在app级别的build.gradle中添加kotlin-and…

亿道丨三防平板电脑厂商哪家好丨麒麟系统三防平板PAD

随着科技的飞速发展,人们对于移动设备的需求越来越高。然而,在不同的行业应用场景下,常规的智能平板往往无法满足特殊的工作要求。,亿道三防平板,将高可靠性与卓越性能高度结合,为各行各业提供卓越的移动解…

STM32F103学习笔记(五)BKP备份寄存器(应用篇)

目录 1. BKP的应用 2. BKP在系统中的配置 2.1 BKP模块的使能和时钟配置 2.2 备份寄存器的配置 2.3 数据存储和恢复的机制 3. BKP应用实例代码 4. 总结 1. BKP的应用 在嵌入式系统中,BKP(备份寄存器)是一个重要的功能模块,用…

【前端素材】推荐优质后台管理系统Symox模板(适用电商,附带源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具,它通常作为一个独立的后台界面存在,供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能: 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…