# 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@example.com"
# 参数含义:
# -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 git@xxxxx.git
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 &