2017/06/13

Volume 指定を忘れた Docker からデータを取り出す

Jenkinsをたてた時、最初はボリュームを指定せずに docker run していました。
後からポートフォワードを追加しようと思って、一旦イメージを commit 。
そのイメージにオプションを追加して起動しても Jenkins が初期化されている。

どうやらボリュームを指定していないとどこかにボリュームを勝手に作るらしい。
なので今まで作業していた分を commit してもコンテナに反映されない。
ということでどこかに作られたボリュームを探せればデータを復旧できそう。

  • docker inspect <container-name>
するといろいろ出てくるがその中に怪しいものが。
Mounts の Source にパスがあるのでこいつっぽい。

  • cp -r /var/lib/docker/volumes/98ef888300af713d65b6d7534d835c7bd2e95270ad5eb016da749bbbb5f6d409/_data hoge
  • docker run -itd -P -v /foo/bar/hoge:/var/jenkins_home jenkins
とかすると復活。やったね。

環境

  • CentOS Linux release 7.0.1406 (Core) 
  • Docker version 1.12.6, build 1398f24/1.12.6

GitHub に push された時に Docker 上の Jenkins から SSH 越しでコマンドを実行する

長いタイトルですがやりたい事は以下です。

  • Jenkins 経由でデプロイ
  • デプロイするタイミングは GitHub の master が更新された時
  • Jenkins は Docker で起動しておく
  • デプロイに使用するコマンドは SSH 経由で本番サーバに適用

さて、タイトル通りややこしい状態なので記事もだいぶ読み辛いものになりそうです。


環境

  • CentOS Linux release 7.0.1406 (Core) 
  • Docker version 1.12.6, build 1398f24/1.12.6
  • Jenkins 2.46.3


Docker でやること(Jenkins を起動する)

  • docker run -itd --privileged --name kaban -v /hoge/fuga:/var/jenkins_home -P jenkins
    • これで Jenkins が立ち上がります
    • --name で名前を付けておくと楽です。とりあえずかばんちゃんです。
    • Jenkins はデータの永続化のためにボリュームを使っています
    • 適当なディレクトリを /var/jenkins_home にマウントしてください
    • Jenkins は uid 1000 なので chown 1000 -R <dir> などをしておくと良いです
    • もしくは chmod で適切な permission を与えてください
    • -P でポートマッピングを適当にやってもらいます。
  • docker exec -it kaban cat /var/jenkins_home/secrets/initialAdminPassword
    • 後で Jenkins を起動した際に要求される初期パスワードです。


Jenkins でやること(初期設定)

  • docker ps をして、8080 がどのポートに割り当てられているか確認します。
  • ブラウザから Jenkins にアクセスします (http://localhost:32769 とか)
  • まず初期パスワードを使って Jenkins を起動します
  • 適当に Install Suggested Plugin を選択します(これに Github Plugin とか入ってたので)
  • 管理者ユーザを作ります
  • Manage Jenkins > Manage Plugins から Available > Publish over SSH を選択します
    • Publish over SSH プラグインを使ってデプロイします
  • Install without restart で Publish over SSH を入れます
  • Configure System > Publish over SSH でデプロイ用サーバに SSH できる設定をします
    • SSH Servers > Add でサーバを追加します
    • Name や Hostname や Username 、 Key か Password を設定します
  • これで土台ができました。


GitHub でやること

  • デプロイ対象のプロジェクトのリポジトリページに行きます
  • Settings > Hooks&Services > Add Service から Manage Jenkins(Github Plugin) を入れます
    • Git Plugin もありますが今回は GitHub Plugin なので間違えないように
  • Jenkins hook URL に Jenkins の URL を指定します
    • http://192.168.0.1:32769/github-webhook/ とかです
  • これで push された際に Jenkins へ通知がいきます。


Jenkins でやること(プロジェクトの設定)

  • New Project から Freestyle Project を作ります
  • GitHub Project に check をいれます
    • なので最初から GitHub Project で作っても良いかも?
    • Repository URL は GitHub の Project URL を指定してください
    • Branch Specifier は */master で良いです。 master に変更があった時のみにデプロイなので
  • Build Triggers で GitHub hook trigger for GITScm polling に check を入れます
  • Build で Send files or execute commands over SSH を指定します。
    • SSH Server は先程 Configure で追加したデプロイサーバを指定します。
    • Transfars: Exec command で SSH 後に実行したいコマンドを指定します。
  • これで完了です。 GitHub の master が更新されると自動で SSH 経由でコマンドが発行されます。


長い道のりでしたがこんな感じで。

ウィンドウマネージャの Spectacle.app を入れてみた

普段はデュアルディスプレイ環境での作業が多いのですが、最近はシングルディスプレイ環境での作業も増えてきました。
私は大体のウィンドウを最大化して使うので、基本 Terminal.app + ブラウザ で二つのディスプレイが埋まっています。
Terminal.app を透過させる手もあるのですが、ちょっと私には向かなかったです。
シングルディスプレイ環境だと、どうしてもウィンドウを切り替えまくる必要があって面倒です。
ということで、この際思い切ってウィンドウマネージャを入れてみました。
今回入れたのは Spectacle.app というやつです。 @_akiyoshiaki_ さんに教えてもらいました。


環境

  • macOS Sierra 10.12.5
  • Spectacle.app 1.2


導入方法

cask に入っているので
  • $ brew cask install spectacle
で導入できます。
あとはディスプレイを動かすことを許可させるために
  • System Preference > Security & Privacy > Accessibility
の Spectacle のチェックを入れます。


設定

私は基本的に二つの画面が見えたら良いので、画面を縦か横に二分割するアクションのみ設定しています。
具体的な設定としては以下のような感じ。 Cmd + 矢印を使っています。

  • Left half : Cmd + ←
  • Right half: Cmd + →
  • Top half: Cmd + ↑
  • Bottom half: Cmd + ↓
  • Full Screen : Cmd  + Enter

設定したものの、実際一番使うのは分割ではなく Full Screen だったりします。
この Full Screen は Mac の Full Screen とは別で、ウィンドウを画面いっぱいに表示する方の Full Screen です。
昔の Mac ではウィンドウの緑のボタンをクリックするとなるやつです。
Sierraだと option を押しながら緑をクリックするやつ。
とりあえずウィンドウを操作する手間を省けそうなのでしばらくは使ってみようと思います。

2017/06/08

GitHub Badge なるものを設定してみた

GitHub Badge なるものを設定してみた。

一応このブログの右側には私の各種アカウントを書いているのだけれど、リンクを列挙しているのみなのでちょっと素っ気無かった。
どこかのブログで Github Badge を使っているのを見付けて、単なるリンクより見栄えも良さそうなので使ってみることにしました。

ちなみにこういうものです。

どのリポジトリでも .DS_Store や swp ファイルを git に commit しないようにする

git init する度に .gitignore を設定するようにしているのですが、迂闊に git add . とかをして .DS_Store などの入れたくないファイルを git に commit してしまうことが何度も発生。

何回も発生するのなら対策しておこう、ということで、どの git リポジトリでも特定のファイルを ignore するようにしました。

とはいっても ~/.config/git/ignore に ignore するファイルを指定するだけ。
これでどのリポジトリでも .DS_Store などの指定したファイルが ignore されます。便利。

にしても ~/.config で書く流儀だと ~/.gitconfig はどう書いたら良いのだろうか。


参考文献