最近Githubを使用して、卒論をバージョン管理させるようにしました。(それまではGistでtexファイルのみ管理してました。)
しかし、そろそろ最終提出ということで、
こまめに研究室サーバへ進捗をアップロードしなくてはならなくなったため、CircleCIで自動化させるようにしました。
※ 追記 : 2018/01/23
uploadスクリプト内でgit config
でパスワード指定していた箇所を修正しました。
構成
git push ➜ uploadスクリプト実行
ここが一番ハマりました。
というのも、最初git hookのpost-receive
を使ってやろうとしていたからです。
数時間、post-receive
の処理が呼ばれないと唸って、
詳しい友達に聞いたところ、Githubは出来ないからGitHub Webhookか、CIを使うよう教えてもらいました(´・ω・`)
今回はprivateリポジトリなのでCircleCIを選択。
uploadスクリプト実行 ➜ 研究室サーバへupload
今回研究室サーバのプロトコルはsftpのため、アップロードにはgit-ftp
を使用することにしました。
https://github.com/git-ftp/git-ftp
マニュアル : https://github.com/git-ftp/git-ftp/blob/master/man/git-ftp.1.md
git-ftp
の良いところが.git-ftp-ignore
ファイルで、アップロードしたくないファイルを指定できることです。
README.md
や.cilrcleci/
下のファイルなどは提出に不要なので取り除くようにしました。
.gitignore
.git-ftp-ignore
README.md
.circleci/**
CirlceCIの設定ファイルは以下になります。
CircleCI2.0はローカルで実行して設定ファイルが正しく動作するか確認できて助かりました。
version: 2
jobs:
build:
docker:
- image: buildpack-deps:scm
steps:
- checkout
- run:
name: Upload server
command: |
chmod +x .circleci/upload_server.sh
./.circleci/upload_server.sh
workflows:
version: 2
build_and_test:
jobs:
- build:
filters:
branches:
only: master
uploadスクリプトは以下になります。
#!/bin/sh
# updateを呼んであげないと、インストールできないとエラーになったため、updateを呼んでます
echo "Running: apt-get -y -qq update"
echo $(apt-get -y -qq update)
# git-ftpを使うため、インストール。
echo "Running: apt-get install git-ftp"
echo $(apt-get install git-ftp)
echo "Running: git ftp --version"
echo $(git ftp --version)
# いつからかssh鍵を使っていない場合、
# コマンドオプション側でパスワードとユーザー名を指定しないと、failureになるようになりました
# git config git-ftp.user "$USER_NAME"
# git config git-ftp.url "$URL"
# git config git-ftp.password "$PASSWORD"
# 研究室サーバへアップロード! (git ftp init済みであること)
# $USER_NAMEなどはCircleCIページから設定したサーバのユーザー名などです。
echo "Running: git ftp push --remote-root <アップロードパス>"
git ftp push -u $USER_NAME -p $PASSWORD --remote-root /lab/xxxx/卒論 $URL
ちなみに、--dry-run
オプションを付けることで実際にアップロードせずに実行結果を得ることが出来ます。不安な場合は一度つけてからの方が良いです。
これで卒論が捗る
なんてことはなく、pushするものがないと機能しないので、頑張って書かなくては。。
卒論は消えるものらしいので、バージョン管理大切ですよね。