首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
函数参数与返回值
传递变长参数
defer 和追踪
内置函数
递归函数
将函数作为参数
闭包
应用闭包:将函数作为返回值
使用闭包调试
计算函数执行时间
通过内存缓存来提升性能
声明和初始化
切片
For-range 结构
切片重组(reslice)
切片的复制与追加
字符串、数组和切片的应用
声明、初始化和 make
测试键值对是否存在及删除元素
for-range 的配套用法
map 类型的切片
map 的排序
将 map 的键值对调
标准库概述
regexp 包
锁和 sync 包
精密计算和 big 包
自定义包和可见性
为自定义包使用 godoc
使用 go install 安装自定义包
自定义包的目录结构、go install 和 go test
通过 Git 打包和安装
Go 的外部包和项目
在 Go 程序中使用外部库
结构体定义
使用工厂方法创建结构体实例
使用自定义包中的结构体
带标签的结构体
匿名字段和内嵌结构体
方法
类型的 String() 方法和格式化描述符
垃圾回收和 SetFinalizer
当前位置:
首页>>
技术小册>>
go编程权威指南(二)
小册名称:go编程权威指南(二)
**git拉代码脚本** 本节课我们将通过一个示例,为大家演示如果编写一个简单的shell脚本,来拉取git代码,并结合前面学过的crontab命令,将拉代码的脚本添加到定时任务中。 ------------ **建立代码仓库:** 在gitee中建立一个代码仓库:shellTest  ------------ **克隆代码**: 在虚拟机中,我们将代码glone下来: ```bash git@gitee.com:liyongheng/shell-test.git ``` 如果提示我们没有权限,需要将我们的key文件添加到gitee,如果使用的是github,操作步骤相同。 1.生成key ```bash ssh-keygen ``` 2.复制key文件内容: ```bash cat id_rsa.pub ``` 3.将pub key添加到gitee  4.重新clone代码 ------------ **测试git提交等操作** 建立一个test.log文件,提交到git仓库 ```bash u1@localhost:~/Documents/shell-test$ vim touch.log u1@localhost:~/Documents/shell-test$ cat touch.log aaaaaaaaaaaa bbbbbbbbbbb ccccccccc ``` 配置用户名、邮箱 ```bash u1@localhost:~/Documents/shell-test$ git config user.email 'xf@qq.com' u1@localhost:~/Documents/shell-test$ git config user.name xf ``` 提交代码: ```bash git add . git commit -m 'add a test file' git push ``` ------------ 编辑shell脚本: deployee.sh ```bash #!/bin/bash cd /home/u1/Documents/shell-test git pull > /dev/null 2>&1 ``` 这个脚本的逻辑非常简单: 每1步,切换到git代码目录shell-test 第2步,运行git pull命令 ------------ 接下来我们在windows下重新下载一份代码,并添加一个文件:a.txt: ```bash PS C:\Users\Admin\Desktop\shell> git clone git@gitee.com:liyongheng/shell-test.git Cloning into 'shell-test'... Warning: Permanently added the ECDSA host key for IP address '212.64.63.190' to the list of known hosts. remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done. ``` 建立a.txt文件,并提交到git仓库。 ```bash PS C:\Users\Admin\Desktop\shell\shell-test> git add . PS C:\Users\Admin\Desktop\shell\shell-test> git commit -m 'add a file' [master 753d17b] add a file 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 a.txt PS C:\Users\Admin\Desktop\shell\shell-test> git push Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 6 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 268 bytes | 268.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: Powered by GITEE.COM [GNK-6.4] To gitee.com:liyongheng/shell-test.git 5d93230..753d17b master -> master ``` ------------ 回到虚拟机,运行shell脚本: ```bash u1@localhost:~/Documents$ bash deployee.sh u1@localhost:~/Documents$ ls shell-test/ a.txt touch.log ``` 可以看到,我们运行shell脚本后,shell-test目录中a.txt文件已经被拉到了本地。 ------------ 将脚本添加到定时任务 ```bash * * * * * /bin/bash /home/u1/Documents/deployee.sh ``` 监控cron运行状态: ```bash tail -f /var/log/cron.log ``` 可以看到,定时任务能够每分钟正常运行 接下来我们再提交一个文件:b.txt ```bash PS C:\Users\Admin\Desktop\shell\shell-test> git add . PS C:\Users\Admin\Desktop\shell\shell-test> git commit -m 'add a new file' [master e360b55] add a new file 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 b.txt PS C:\Users\Admin\Desktop\shell\shell-test> git push Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Delta compression using up to 6 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 265 bytes | 265.00 KiB/s, done. Total 2 (delta 0), reused 0 (delta 0), pack-reused 0 remote: Powered by GITEE.COM [GNK-6.4] To gitee.com:liyongheng/shell-test.git 753d17b..e360b55 master -> master ``` 查看虚拟机git代码目录: ```bash u1@localhost:~/Documents$ ls shell-test/ a.txt b.txt touch.log ``` 可以看到,b.txt文件被自动拉取到本地,代码我们的定时任务运行shell脚本功能完成。 ------------ **小结:** 我们这节课的内容主要目的是为了演示shell脚本与定时任务。 在实际场景中,如果是开发环境,或者测试环境,通常需要配置用户提交代码后,直接将代码反应到测试服务器上 通过上面这种方式实现了这个效果 缺点是,代码反应时间最长要等1分钟,也就是定时任务每次执行的时间 另一个缺点是,每分钟都去拉一下代码,可能这1分钟内,并没有人提交代码,但还是执行了git pull命令。 使用webhook拉代码: webhook的实现流程是,当git服务器检测到代码提交事件发生时,会通知我们在github上定义的hook,而该hook要做的事情是,向我们自定义的一个url发送一个通知,当我们接到通知后,我们就执行一次git pull命令。 这样做的好处是,只有当有人提交了代码,我们才去做拉代码这个操作。
上一篇:
shell编程-常用命令补充
下一篇:
源码安装Nginx
该分类下的相关小册推荐:
企业级Go应用开发从零开始
Go Web编程(下)
Go语言从入门到实战
Go 组件设计与实现
go编程权威指南(四)
Go Web编程(上)
WebRTC音视频开发实战
Go开发基础入门
GO面试指南
深入浅出Go语言核心编程(五)
深入浅出Go语言核心编程(八)
深入浅出Go语言核心编程(三)