2017/06/22

blogger を https 対応させる

タイトル通り。 自分のブログのポストを見たら http だったので今の時代これはまずいなー、と。

どうやら http -> https のリダイレクトもしてくれるようなので設定しない手は無い。
blogger > 設定 > 基本 > HTTPS > HTTPSリダイレクト にチェックを入れる。
これで https 対応とリダイレクトもしてくれる。便利。

参考

Jenkins でビルドの情報を Slack に投稿する

Jenkins ネタでもう一つ。
ビルドの開始や失敗、成功を Slack に流したくなったのでそのログ。


環境

  • CentOS Linux release 7.0.1406 (Core)
  • Docker version 1.12.6, build 1398f24/1.12.6
  • Jenkins ver. 2.46.3
  • Slack Notification Plugin 2.2


構築方法(Slack)

  • Slack 側の Add Integration で Jenkins を指定
  • 通知させたいチャンネル名を指定
  • 発行された token をコピーしておく


構築方法(Jenkins)

  • Manage Jenkins > Plugin Management > Available
    • Slack Notification Plugin をチェック
    • install without restart 
  • Manage Jenkins > Plugin Management
    • team subdomain: 通知したい Slack の subdomain
    • 例えば hoge.slack.com なら hoge
    • Integration Token は先程コピーした  token で
    • Channel は通知したいチャンネル
    • Is Bot User ? にはチェックを入れない
  • Test Connection できちんと Slack にポストされていれば設定はOKです


構築方法(Jenkins Project)

  • 通知させたい Project の Configure を開く
  • Post-build Actions
    • に Slack Notifications を追加
    • 通知させたいイベントにチェックを入れる
  • Project > serval > Post-build Actions > Advanced
    • は特別設定しなければ先程のグローバル設定が使われるので空白で良いです
    • 私は Notification message includes を commit list with authors only に設定しました


まとめ

この設定をすることで  Jenkins がビルドした時に Slack へ通知が行なわれます。
今回面倒だったこととしては、 Is Bot User? にチェックを入れていた時、Test Connection ではきちんと通知がされるのに、ビルドした時だけは通知がされないという絶妙な状態になることがありました。どうしてチェックを入れたらダメなのだろ。


参考

2017/06/20

Docker で古いコンテナとイメージを消す

Docker で適当にコンテナを作っていたり、CI とかをしていると使われなくなったコンテナが大量に積もっていきます。
それを適当に消したのでそのメモ。


環境

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


コマンド

  • docker ps -aq | tail -30 | xargs  docker rm
基本的には古いものから消していく方針で。
images の option で -q を付けると hash だけを出してくれます。
あと -f で特定の条件のみで絞りこみをしてくれるようです。
  • docker ps -qaf "status=exited"
とかすると止まってるのだけ出してくれる。
動いてるコンテナは -f を付けない限り消さないので、 とりあえず全部 rm に渡してしまうのもありかも。

あとはイメージを消すだけです
  • docker images -aq | xargs docker rmi
こいつも使われているイメージは -f を付けない限り残してくれる。
なのでとりあえず消せそうなもの全部消そうとしてみる、とか可能です。

  • docker images -qf dangling=true
とかでタグが付いていないイメージだけを対象にする、というコマンドが参考記事にありましたが、今回はタグが付いているイメージもあるので -aq で。


まとめ

  • docker ps -aq | xargs  docker rm
  • docker images -aq | xargs docker rmi
とかでとりあえず起動していないコンテナ以外消えます。
新しい docker だと docker image prune とかあるらしいのでもっと楽かも。


参考文献

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 経由でコマンドが発行されます。


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