- 投稿日:2020-09-23T11:43:28+09:00
cronでGithubにPushするプロセスを自動化する
やったこと
Pythonとcrontabを使って、データファイル(pklフォーマット)を一週間に一回(土曜日の午後7時)に更新されるようにしました。
毎週更新されるデータをGithubに自動的にPushしたく、同じくcrontabを使ってやってみた。
環境
- Linux Mint 19
- Python 3.6.9
- git 2.17.1
GithubでSSH接続する
ssh接続する方法はたくさんネットに上がっているので割愛します。
(参考: GitHubにssh接続できるようにする)GITコマンドでプッシュしてみる
ssh接続が出来たら、gitコマンドでPushしてみる。
アップしたいデータファイルはplayers_data.pklというpythonのpickleというモジュールを使用したフォーマットです。
git add players_data.pkl git commit -m "最初のコミット" git remote add origin git@github.com:<ユーザー名>/<レポジトリ名> git push origin master自動化のPythonコードを作成
この一連の作業を自動化するPythonのコードを書きます。
使用するのはsubprocessというModuleで、bashコマンドをPythonで実行することが出来ます。(参考:Python の subprocess)
new_data.pyimport os import datetime import subprocess as cmd #input values new_date = datetime.datetime.now().strftime('%Y%m%d') current_dir = os.getcwd() #Subprocessで自動化 cp = cmd.run(f"git -C {current_dir} add players_score.pkl", check=True, shell=True) cp = cmd.run(f"git -C {current_dir} commit -m 'scoresheet updated on {new_date}'", check=True, shell=True) cp = cmd.run(f"git -C {current_dir} push origin master", check=True, shell=True) print('Githubへのアップ成功!')この段階で
python3 new_data.py
をbashで実行し、ちゃんとGithubにアップされているか確認してもよいでしょう。SSH のラッパースクリプト(git-ssh.sh)を作成
ここが今回引っかかったところなのですが、crontabでgit push origin masterを実行しようとすると、以下のようなエラーがでます。
Command 'git -C /path/to/folder/ push origin master' returned non-zero exit status 128.
cron から自動で git push するを参考にすると、
cron から自動で git push したい時、ssh の秘密鍵を明示的に指定して git push する必要があります。
というわけで以下のSHファイルを.sshのあるフォルダーに置いてやることが必要です。
/path/to/.ssh/git-ssh.sh#!/bin/sh exec ssh -oIdentityFile=/path/to/.ssh/id_rsa "$@"このSHファイルに実行権限を与えることも必要。
cd /path/to/.ssh chmod +x git-ssh.shSHファイルでPythonを動かす
直接Crontabでやってもいいのですが、今回はSHファイルを作成してPythonを動かすようにします。
scripts.sh#!/bin/sh cd /path/to/folder export GIT_SSH=/path/to/.ssh/git-ssh.sh python3 new_data.py > output_newdata.txtcrontabでSHファイルを定期的に実行する
最後にcrontabで定期実行の方法です。
まず
crontab -e
をbashで実行し、crontabを開けます。Cronの設定の仕方は割愛しますが、毎週土曜日の午後7:00にscripts.shを定期実行したいときは下記のようにします。(参考:crontabのガイドライン)
00 19 * * 6 bash /path/to/folder/scripts.shこれでうまく定期実行のできるようになりました。
参考サイトまとめ
- 投稿日:2020-09-23T09:07:23+09:00
リモートのブランチがmasterしかないときは.git/configを確認する
.git/config
の fetch を確認する
fetch = +refs/heads/master:refs/remotes/origin/master
とかだと、masterしか見えない。
fetch = +refs/heads/:refs/remotes/origin/
にすると全部見える。
- 投稿日:2020-09-23T09:00:59+09:00
リポジトリが大きすぎて、cloneできないときは小分けにする
git clone --depth 1 hogehoge
cd hogehoge
git fetch --depth 50
git fetch --depth 100
git fetch --depth 500
・・・
git fetch --unshallow
- 投稿日:2020-09-23T08:51:22+09:00
warning: http.sslcapath has multiple values エラー
背景
gitの設定値の sslCAPathの設定中に
warning: http.sslcapath has multiple values
が発生して設定がうまくできない場合原因
エラーメッセージ通り複数のsslcapathが設定されている場合にエラーとなる。
複数あるか確認
git config -l | grep ssl http.sslcapath=/Library/xxx/somecacert1.pem http.sslcapath=/Library/xxx/somecacert2.pem解決策
unset-allする。
# いい例 sudo git config --unset-all --system http.sslCAPath普通にunsetしようとしてもうまくできないので注意
# ダメな例 sudo git config --unset --system http.sslCAPath参考
Window Git $ git config --global http.proxy warning: http.proxy has multiple values