ジョギング
- 香椎浜 x 2 周
日課
- (腕立て x 30 + 腹筋 x 30) x 3
kazukin
かずきんと香椎で呑んだ。
数少ないかもしれない、同年代で異業種の友人で色々と語り合った。
二軒目に寄った場末のスナックではっちゃけてるかずきんに昭和の匂いを感じた(笑
スマフォ用にバッファローの折り畳み式キーボードを購入した。ヨドバシカメラ博多店で 2000 円也。
簡単に試用メモを書いてみる。
http://m.buffalo.jp/product/input/keyboard/bskbb15/
値段相応だけど、特に打ちづらいということはなくサクサク入力出来ている。
キーボードの配列は残念ながら US 配列なので日本語入力の際には注意が必要。
Galaxy S6 Edge とペアリングさせたけど、速攻で繋がって嬉しかった。
キーボードを納めているケースがそのままスタンドになるので嬉しい。
ESC キーでスマフォロックが出来るのが嬉しい。
Shift + Space でいける。
Alt + Tab もしくは Win + Tab でいける。
普通に Ctrl + c と Ctrl + v でいける。
以下のアプリを入れて対応した。
軽い二日酔いで辛い。
PHP カンファレンスに来ていた同僚の 1P さんとおやまつさんの三人で博多駅のほろ酔い横丁でお寿司をつまみながら昼呑み。
業務で直接からむことはないけど、色々と楽しい話を聞けたので良かった。
以前から欲しかったスマフォ用のキーボードをヨドバシで購入した。2000 円也。
http://m.buffalo.jp/product/input/keyboard/bskbb15/
Galaxy S6 Edge とも特に難しい設定は必要なくサクッと繋がった。配列が英語配列なので慣れは必要かもしれないけどなかなか快適。
では、Backlog Git と連携はどげんすればよかとかね。
その答えにヒントを与えてくれたのは以下の記事。
Integrating Git with AWS CodePipeline | AWS DevOps Blog
なるほど…とにかく、何らかの方法で Codepipeline までソースコードをお届け出来れば…ということで、Backlog Git の Webhook と API Gateway + Lambda を組み合わせればいけそうな気がする!
以下のような構成を作ってみた。
以下のような JSON データを送信する。
{ "before": push前のコミット, "after": push後のコミット, "ref": 参照 "repository": { "url": リポジトリのURL, "name": リポジトリ名, "description": リポジトリの説明, }, "revisions": [{ "id": コミットのID, "url": コミットのURL, "author": { "email": コミットした人のメールアドレス, "name": コミットした人の名前 }, "message": コミットメッセージ, "timestamp": タイムスタンプ, "added": [ 追加されたファイル ], "removed": [ 削除されたファイル ], "modified": [ 修正されたファイル ], }] }
詳細は以下のページに記載されている。
Python で書いてみた。
# -*- coding: utf-8 -*- import os import os.path import sys import urllib import urlparse import shutil import json sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'vendor')) import boto3 import dulwich.client from dulwich.repo import Repo from dulwich import porcelain target = os.environ['TARGET_DIR'] username = os.environ['USER_NAME'] password = os.environ['PASSWORD'] source_bucket = os.environ['BUCKET_NAME'] def git_clone(repo_url): print repo_url + ' からソースコードを取得します.' parsed_url = urlparse.urlparse(repo_url) src = parsed_url.scheme + '://' + username + ':' + password + '@' + parsed_url.netloc + parsed_url.path + '.git' if not os.path.isdir(target): os.mkdir(target) else: shutil.rmtree(target) try: porcelain.clone(src, target) except Exception as e: print(e) print(os.listdir(target)) def zip_files(): print 'ソースコードを zip で圧縮します.' try: shutil.make_archive(target, 'zip', target) except Exception as e: print(e) def upload_to_s3(): print '圧縮したソースコードを s3 にアップロードします.' zip_file_name = target.split('/')[-1] s3 = boto3.client('s3') try: s3.upload_file(target + '.zip', source_bucket, zip_file_name + '.zip') except Exception as e: print(e) def git(event, context): payload = json.loads(event['body']['payload']) repo_url = payload['repository']['url'] git_clone(repo_url) zip_files() upload_to_s3() response = { 'statusCode': 200 } return response
以下の点を直したいけど取り急ぎ。
Serverless Framework を使えば一瞬だった… serverless.yml は以下の通り。
service: slstest provider: name: aws runtime: python2.7 region: ap-northeast-1 iamRoleStatements: - Effect: "Allow" Action: - "s3:PutObject" Resource: "arn:aws:s3:::demodemo-codepipeline/*" functions: hello: handler: handler.git memorySize: 128 timeout: 60 events: - http: path: git/push method: post integration: lambda request: parameters: querystrings: payload: true environment: USER_NAME: kappa PASSWORD: xxxxxxxxxxxxxx TARGET_DIR: /tmp/oreno-repo BUCKET_NAME: demodemo-codepipeline
今まで何で Serverless Framework を使っていなかったんだろうと後悔。
以前に書いた記事を参考にした。
これはマネジメントコンソールから。
S3 バケットを作って、バージョニングを有効にして CodePipeline からソースプロバイダとして指定するだけ。
以下のドキュメントを参考にして Codebuild で Ruby のテストを走らせてみた。
ファイル構成は以下の通り。
$ tree oreno-repo/ oreno-repo/ ├── HelloWorld.rb ├── HelloWorld_spec.rb └── buildspec.yml 0 directories, 3 files
buildspec.yml は以下の通り。
version: 0.1 phases: install: commands: - echo Installing RSpec... - gem install rspec build: commands: - echo Build started on `date` - echo Compiling the Ruby code... - rspec HelloWorld_spec.rb post_build: commands: - echo Build completed on `date` artifacts: files: - HelloWorld.rb
実際にビルドを走らせた図。
あえて Failed させている。
本構成には以下のような課題が残っている。
事前に
www.slideshare.net
をチュートリアルしていたので勉強会の内容の半分位は理解出来た気がする。
Elixir やってくぞ!