# 1.场景分析
工作中常常会遇到本地编辑shell脚本或者python脚本完成后需要在服务器上运行的情况,每次进行拷贝费时费力。下面介绍下通过git管理器,实现本地与服务器代码同步的方式。选择公司搭建的gitlab为例:
2.gitlab配置服务器ssh密钥
2.1 服务器生成SSH key
- 检查服务器是否已经有 SSH key
# 在git bash中输入以下命令 cd ~/.ssh ls
- 上面的命令是查询 是否已经生成过 SSH key,如果已经生成了SSH key,则可以跳过生成SSH key这一步
# 生成 SSH key ssh-keygen -t rsa -b 4096 -C "[email protected]" # 参数含义: # -t 指定密钥类型,默认使用rsa,可以不写 # -C 表示comment,设置注释文字 # -b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。 # -f 指定密钥文件存储文件名。 # 以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如: # 省略写法: ssh-keygen -t rsa -m PEM #后面全部回车键即可 # 生成id_rsa.pub和id_rsa # id_rsa.pub即为公钥
2.2 在gitlab上添加SSH key
- 复制 id_rsa.pub 文件的内容
clip < ~/.ssh/id_rsa.pub
- 在gitlab 添加SSH
登录到你的gitlab,点击右上角头像的下拉菜单的 Setting -> SSH Keys
将刚刚复制的id_rsa.pub粘贴到图中第三个位置
2.3 验证SSH key
通过复制git项目中的ssh地址,然后使用命令拉取代码
git clone git项目中的ssh地址
3.自动化拉取及执行脚本样例
vim /data/git_shell_run.sh #!/bin/bash code_addr=/data/code warehouse_fold=/ods start_date="2024-01-01" end_date="2024-01-17" cd $code_addr git pull [email protected] table_names=("table1" "table2") for table_name in "${table_names[@]}" do current_date="$start_date" while [ "$current_date" != "$end_date" ]; do # 执行你的命令,这里用echo做示例 echo "执行命令,当前日期:$current_date,同步的表为:$table_name" bash $code_addr$warehouse_fold/$table_name.sh $current_date # 日期递增 current_date=$(date -d "$current_date + 1 day" +%Y-%m-%d) done done #nohup /data/git_shell_run.sh >/data/test.txt 2>&1 &