33
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-29

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

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

33
21
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?