Git
GitHub
CircleCI
CircleCI2.0

CircleCIで卒論リポジトリを研究室サーバに自動アップロードする

More than 1 year has passed since last update.

最近Githubを使用して、卒論をバージョン管理させるようにしました。(それまではGistでtexファイルのみ管理してました。)

しかし、そろそろ最終提出ということで、

こまめに研究室サーバへ進捗をアップロードしなくてはならなくなったため、CircleCIで自動化させるようにしました。

※ 追記 : 2018/01/23

uploadスクリプト内でgit configでパスワード指定していた箇所を修正しました。


構成

uploadci.png


git push ➜ uploadスクリプト実行

ここが一番ハマりました。

というのも、最初git hookのpost-receiveを使ってやろうとしていたからです。


参考 : git hookでサイトを更新、やってみた


数時間、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/下のファイルなどは提出に不要なので取り除くようにしました。


.git-ftp-ignore

.gitignore

.git-ftp-ignore
README.md
.circleci/**

CirlceCIの設定ファイルは以下になります。

CircleCI2.0はローカルで実行して設定ファイルが正しく動作するか確認できて助かりました。


参考 : CircleCI 2.0はローカル環境で実行できるよ



.circleci/config.yml

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スクリプトは以下になります。


.circleci/upload_server.sh

#!/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するものがないと機能しないので、頑張って書かなくては。。

卒論は消えるものらしいので、バージョン管理大切ですよね。