Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
21
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Organization

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
21
Help us understand the problem. What are the problem?