云原生系列4 批量定时更新本地代码库

云原生系列4 批量定时更新本地代码库

图中是一个自动化的机械流水线。

作为一名程序员,每天一定有非常多工作是每天必须重复的,

如何消除重复性的工作?也让自己日常重复工作自动化呢?

背景和需求

云原生系列4 批量定时更新本地代码库

开发人员入职一家新公司,一般会使用git来进行代码的版本管理和协作,

负责的代码库随着时间的推移会慢慢增加,最后可能会有1-20个代码工程,

有些是新的工程,需要做新的功能特性开发,有的是老的工程做维护开发,

而每个工程可能是多人协作的。手工更新多个代码工程的代码,

有一些重复性的工作在里面,随着时间的推移,

这个时间的消耗会更多,浪费了大量的编码和设计时间。

云原生系列4 批量定时更新本地代码库

假如每天花2分钟做拉取代码, 如果你维护20个工程,

一年按照正常工作日上班,需要耗费173个小时时间。

目标提炼

这个批量更新代码的时间完全可以自动化,即通过定时任务执行脚本的方式,

每日定时的批量更新你的代码工程,节约这个每年86个小时的时间,

有更多的时间做设计和陪女朋友。

实现路径

要点:

  1. 列举出你维护的git代码工程,并简单备注名称,类型;
  2. 没有则clone代码到本地,有则拉取代码到本地,并做一定扩展;
  3. 定时任务执行你的任务,在上班之前执行;

云原生系列4 批量定时更新本地代码库

列举维护的代码工程

文件名: codeProject.text

比如我录入了我放在github上的三个工程代码;

git@github.com:carterbrother/springbootpractice.git|springbootpractice|springboot练习代码|backend
git@github.com:carterbrother/COLA.git|cola|cola骨架代码|backend
git@github.com:carterbrother/cat.git|cat|cat服务监控代码|backend

循环处理代码并可不断扩展

一个shell循环处理即可,同时预留扩展;

比如如果是java后端工程,需要执行mvn clean install到本地;

如果是vue前端工程需要执行类似的操作;

总体的脚本如下:

#!/usr/bin/env bash
#set -e

function doExtend() {
  serviceType=$1
  appPath=$2
  if [ ${serviceType} == 'backend' ]; then
    cd ${appPath}
    git checkout dev
    git pull
    mvn clean install -Dmaven.test.skip=true
  fi
}

echo '拉取工作维护代码到本地开发机器'

export shPath="${PWD}"
echo "当前路径:${shPath}"

export codeBasePath=~/src/work
echo "你设置存放工作代码的目录是:${codeBasePath}"

if [ ! -d ${codeBasePath} ]; then
  echo "你设置存放工作代码的目录是:${codeBasePath} 它不存在,自动创建它!"
  mkdir -p ${codeBasePath}
fi

export codeProject="codeProject.txt"
echo '按照行来读取您维护的代码工程文件: ${codeProject}'

for line in $(cat "${shPath}/${codeProject}"); do
  echo "line conent: ${line}"
  arr=(${line//|/ })
  repoName=${arr[0]}
  serviceName=${arr[1]}
  serviceTitle=${arr[2]}
  serviceType=${arr[3]}
  echo "服务名称: ${serviceTitle},服务类型:${serviceType} 仓库git地址:${repoName} "

  appPath="${codeBasePath}/${serviceName}"

  if [ ! -d ${appPath} ]; then
    pwd
    echo "代码${serviceName}不存在,需要git clone到本地"
    cd ${codeBasePath}
    git clone "${repoName}"
  else
    cd ${appPath}
    pwd
    echo "代码${serviceName}存在,需要更新 git pull"
    git pull
  fi

  doExtend ${serviceType} ${appPath}
done

前提是你需要配置好你的git的ssh公钥信息到你的gitlab库,

这里不会配置的话可自行利用搜索引擎。

定时任务执行脚本

我使用的是mac电脑,可以使用crontab工具来定时的执行上面的脚本。

命令格式:

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

备份和恢复crontab

备份
crontab -l > $HOME/.mycron
恢复
crontab $HOME/.mycron

把文件放到对应的位置,crontab -e编辑,写入指令即可。

#每天6点定时拉取代码
* 6 *  *  * sh ~/tool/codetool/pullCode.sh

小结

一句话概括本篇:使用shell指定和定时任务crontab自动化的批量更新你的代码工程一年可节约86个小时时间。

云原生系列4 批量定时更新本地代码库

原创不易,关注诚可贵,转发价更高!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。

Original: https://www.cnblogs.com/snidget/p/14410324.html
Author: 李福春
Title: 云原生系列4 批量定时更新本地代码库

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589467/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Cobol代码通过工具自动生成java代码 展示版

    本例是通过工具将cobol代码自动生成java代码。生成后的java代码是按照java编程风格生成的,完全屏蔽了cobol的特性。 一个cobol代码生成了4个java代码,分别说…

    Java 2023年6月8日
    066
  • 为什么实体类要实现Serializable进行序列化?

    为什么实体类要实现Serializable进行序列化? 转载 ​ 客户端访问了某个能开启会话功能的资源,web服务器就会创建一个与该客户端对应的HttpSession对象,每个Ht…

    Java 2023年6月8日
    079
  • etcd v3版本生产级集群搭建以及实现一键启动脚本

    本专栏的上一篇文章写了《长篇图解etcd核心应用场景及编码实战》,本文继续。后续计划章节内容如下: 《长篇图解etcd核心应用场景及编码实战》 《搭建高可用etcd集群》 《基于e…

    Java 2023年6月15日
    072
  • J J2EE 和spring的发展历史

    Spring 自从2003年发布以来,一直是Java开源框架的奇迹之一。从2000年开始,伴随着B/S架构逐渐引入企业应用软件开发的领域,Java就逐渐成为企业应用开发的主流技术,…

    Java 2023年5月29日
    049
  • rabbitmq 一些参数设置

    rabbitmq 方法的一些参数设置以及解释 消费者采用手动应答 // 采用手动应答 false 采用手动应答,true采用自动应答 boolean autoAck = false…

    Java 2023年6月9日
    066
  • 12、线程优先级

    12、线程优先级 priority java;gutter:true; package com.testthread1;</p> <p>/*<em&g…

    Java 2023年6月8日
    052
  • SpringBoot一个服务按多个端口同时启动

    为了模拟集群环境,本地项目一个项目按不同端口多启动,如何配置多个端口同时启动。 1、首先,你得有一个springboot项目,然后点击修改运行配置 2、将你的项目配置的右上角的Al…

    Java 2023年5月30日
    064
  • 云原生系列5 容器化日志之EFK

    上图是EFK架构图,k8s环境下常见的日志采集方式。 日志需求 1 集中采集微服务的日志,可以根据请求id追踪到完整的日志; 2 统计请求接口的耗时,超出最长响应时间的,需要做报警…

    Java 2023年6月8日
    0187
  • CDH6.3.2升级Hive到4.0.0

    升级目的:为上层开发,提供统一元数据服务并能通过hive操作kudu表,kylin可以通过hive对在kudu中的数据做分析 面临问题:hive4.0之前hive没有KuduSto…

    Java 2023年6月6日
    069
  • Mockito+Junit5单元测试

    参考:https://segmentfault.com/a/1190000006746409https://waylau.com/mockito-quick-start/ 1.引入…

    Java 2023年6月6日
    085
  • Android框架式编程之JavaPoet框架

    一、JavaPoet 介绍 JavaPoet是Square推出的开源Java代码生成框架,提供Java Api生成.java源文件。这个框架功能非常有用,我们可以很方便的使用它根据…

    Java 2023年5月29日
    092
  • Java8新特性之Stream–collect方法

    collect方法收集(collect)collect,收集,可以说是内容最繁多、功能最丰富的部分了。从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新…

    Java 2023年5月29日
    090
  • 5. SpringBoot框架华夏ERP源码审计

    环境搭建 华夏ERP基于SpringBoot框架和SaaS模式,可以算作是国内人气较高的一款ERP项目,看网上已经公开了漏洞,本次对此框架代码进行源码审计。 直接拖入IDEA加载,…

    Java 2023年5月29日
    064
  • Dapr 和 Spring Cloud 对比分析

    很多人都是使用SpringBoot 和 Spring Cloud来开发微服务。Dapr 也是开发微服务的框架,它和Spring Cloud有什么区别呢,其实这不是一个区别的问题,它…

    Java 2023年5月29日
    064
  • Java开发学习(九)—-IOC之核心容器

    这里所说的核心容器,大家可以把它简单的理解为 ApplicationContext,前面虽然已经用到过,但是并没有系统的介绍过,接下来咱们从以下几个问题入手来下容器的相关知识: 如…

    Java 2023年5月29日
    063
  • SpringBoot进阶教程(七十二)整合Apollo

    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服…

    Java 2023年6月8日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球