gitlab-ci-multi-runnerをRaspberry Piで動かしてDockerコンテナをビルド,Gitlab Container Registryにpushさせる
これらの過去記事で作成したGitlab環境を使用します.
前回の課題点の解消
メールアドレスの設定に関してはコンテナを再ビルドすることで解決しました.一応設定値としては以下のものを使用しました.
gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = 'gitlab@hoge.com' gitlab_rails['gitlab_email_display_name'] = 'Gitlab' gitlab_rails['gitlab_email_reply_to'] = 'gitlab@hoge.com' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.hoge.com" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "gitlab@hoge.com" gitlab_rails['smtp_password'] = "パスワード" gitlab_rails['smtp_domain'] = "hoge.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true
一応さくらのメールサーバを使用しています.設定したgitlab@hoge.com
をあらかじめ作っておけばそこからメールが届くようになります.
きっかけ
Docker HubのAutomated Buildという素晴らしい機能を知ったので自分のDockerfileを元にイメージを作らせたりしていたのですが,こいつはx86_64しか対応しておらず,armのイメージのビルドでこけることがわかりました.
ネットでググると何らかのCIを使ってpushしてDockerhubにアップロードしろと出てきたのですが,どうせ自分の自宅内でしか使わないイメージなので,Gitlabの提供するGitlab Container Registryを使ってみようかと.ちょうど余っているRasberry Pi2でrunnerを走らせてビルド,pushしようと考えました.
環境
- Gitlabを動かしているサーバ
- Ubuntu Server 16.04
- Gitlab Community Edition 8.16.5
- Docker 1.13.1
- Docker-compose 1.8.0
- Raspberry Pi 2 B+
- HypriotOS 1.1.3
- Docker 17.03.0-ce
- Docker-compose 1.9.0
- gitlab-ci-multi-runner 1.11.1
- RasPiにイメージを書き込むMac
- macOS Sierra 10.12.3
- Homebrew 1.1.11
HypriotOS*1はRaspberryPiでDockerを動作させるためにカスタマイズされたOSで,ベースはRasbianだそうです.
Dockerのバージョン表記がアレなのでちょっと怪しい…
準備
HypriotOSのイメージを書き込む
ここを参考にさせていただきました.
ほとんど詰まることなくできましたが一点だけ注意があり,初期ユーザとパスワードがRasbianのデフォルトから変更されていました.
初期ユーザ: pirate
初期パスワード: hypriot
今回は無線LANを使用していません.RasPiは有線で接続しました.
Gitlabの動いているサーバ上の準備
Container Registryを有効にする
Gitlabを普通にたてただけではContainer Registryは有効になっていません.gitlabコンテナの設定をしているdocker-compose.yml
に以下の設定のように環境変数を加えます.
gitlab.example.com
がgitlabのURL,registry.gitlab.example.com
がContainer RegistryのURLです.
# 省略 services: gitlab: image: gitlab/gitlab-ce # 省略 environment: VIRTUAL_HOST: gitlab.example.com, registry.gitlab.example.com VIRTUAL_PORT: 80 LETSENCRYPT_HOST: gitlab.example.com, registry.gitlab.example.com LETSENCRYPT_EMAIL: hoge@example.com GITLAB_OMNIBUS_CONFIG: | external_url "https://gitlab.examle.com" nginx['listen_port'] = 80 nginx['listen_https'] = false nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on" } # Container Registryにアクセスする設定 registry_external_url "https://registry.gitlab.example.com" registry_nginx['listen_port'] = 80 registry_nginx['listen_https'] = false registry_nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on" } # 以下省略
起動します.
$ docker-compose stop $ docker-compose up -d
有効になるとプロジェクトのページのタブにRegistry
という項目が現れます.
フロントのnginxのclient_max_body_sizeの値を変更する
registryを有効にしてもこのままではほとんどのイメージはclient_max_body_size
に引っかかってしまいpushできません.
docker-genを使っているので,vhost.dに設定を置いてやればよしなにしてくれそうです.
ディレクトリ構造とかは過去記事を参照してください.
$ docker-compose stop $ cd vhost $ sudo sh -c 'echo "client_max_body_size 3G;" > registry.gitlab.example.com' $ docker-compose up -d
適当に3GBとかにしています.必要に応じて変えた方が良いでしょう.
RasPi上の準備
gitlab-ci-multi-runnerをインストール
HypriotOSがうまく起動してsshして使えるようになったら各種設定を済ませてください.
まずgitlab-ci-multi-runnerをインストールします.本家のDockerコンテナもありますがarmでは動かないようなのでapt-getします.
$ curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
$ sudo apt-get install gitlab-ci-multi-runner
runnerを登録したりしていきます.ここでは既存のユーザ(pudding
)を用いていますが,必要であればgitlab-runner
ユーザなどを追加,dockerグループに所属させると良いと思います.
またregistration-tokenはhttps://gitlab.example.com/admin/runners/
にあります.このtokenを用いるとSharedなRunnerができます.
https://gitlab.example.com/<ユーザ名>/<プロジェクト名>/runners/
にあるtokenを用いるとSpecificなRunnerができます*2.
$ sudo gitlab-ci-multi-runner install --user pudding --working-directory /home/pudding/ $ sudo gitlab-ci-multi-runner register -n \ --executor shell \ --registration-token xxxxxxxxx \ --url https://gitlab.example.com/ \ --description "Runner on RasPi using Shell" \ --name rpi_shell $ sudo gitlab-ci-multi-runner start
一度installすれば何度でもregisterできる?ようです.
CIする
プロジェクトにおいてrunnerを有効化
以下の様な構造のリポジトリをpushしておきます.
. ├── data │ └── config.ini ├── deploy.sh ├── docker-compose.yml ├── Dockerfile └── README.md
今回は二つのコンテナで共通の設定値を使用するため上記のiniファイルをマウントさせたりしています.このファイルは.gitignoreに記述するため,最初にアップロードなりなんなりしておく必要があると思います.
このリポジトリをデプロイ先にもcloneしておき,デプロイ時にpullするようにします.
https://gitlab.example.com/admin/runners/
にアクセスすると,runnerが見えるようになっているかと思います.Editを押して編集しましょう.
タグを付加できるのですがコマンドで付加する方法がわからなかったので手動でやっています.
Enableにする前はページ下部にプロジェクト一覧が出ますので,有効にしたいプロジェクトでenableしましょう.
.gitlab-ci.ymlを書く
stages: - build - test - release - deploy variables: CONTAINER_TEST_IMAGE: CI_REGISTRY_IMAGE:BUILD_REF_NAME CONTAINER_RELEASE_IMAGE: CI_REGISTRY_IMAGE:latest before_script: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY build: stage: build script: - docker build -t $CONTAINER_TEST_IMAGE . - ocker push $CONTAINER_TEST_IMAGE tags: - rpi - shell test: stage: test script: - docker pull $CONTAINER_TEST_IMAGE - docker run --rm $CONTAINER_TEST_IMAGE "something test" tags: - rpi - shell release: stage: release script: - docker pull $CONTAINER_TEST_IMAGE - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE - docker push $CONTAINER_RELEASE_IMAGE tags: - rpi - shell only: - master deploy_staging: stage: deploy script: - docker pull $CONTAINER_RELEASE_IMAGE - cd /path/to/project - git pull - ./deploy.sh tags: - rpi - shell only: - master deploy: stage: deploy script: - docker pull $CONTAINER_RELEASE_IMAGE - cd /path/to/project - git pull - ./deploy.sh tags: - rpi - shell only: - master - release
variablesで宣言している以外の環境変数はrunnerが走るときに用意されているものです.CI_DEBUG_TRACE: "true"
をvariablesに付加すると,ビルド時のログに全ての環境変数とその値*3が表示されます.
before_scriptは毎回script実行の前に実行されるスクリプトを記述する項目で,Container Registryにログインするためのコマンドを入れています.
gitlab-ci-token
はtokenを入れるのではなく,この名前のユーザが特別に設定されています.CI_BUILD_TOKEN
も既に用意されている変数で,これらによってパスワード等の設定が必要なくContainer Registryにloginできます.便利.
tagsでは実行するrunnerをtagで指定しています.複数追加した条件はandになります.条件に合致するrunnerがない,またはrunnerが走っていない場合はpending
のままで止まるようになっています.追加する(走らせる)と自動的にrunningになります.
deployは本番サーバへのデプロイと,テストサーバへのデプロイで分けています.これはonlyにおいてgitのtagで限定するという条件を付加して分けています.
後はaddしてpushするだけ.
$ git add .gitlab-ci.yml $ git commit -a -m "add .gitlab-ci.yml" $ git push origin master
CIが回っているのを確認する
https://gitlab.example.com/<ユーザ名>/<プロジェクト名>/pipelines
に結果の一覧があります.
一つ一つのpipelineを開くと以下の様な画面が出ます.
さらに一つ一つのstageのログを確認できます.
環境変数の名前が上で書いたものと違っていますがやってることは一緒です()
Registryにアップロードされているか確認する
https://gitlab.example.com/<ユーザ名>/<プロジェクト名>/container_registry
から見れます.
なるほど便利.
まとめ
Gitlab Container Registryはとても便利ですね.
Raspberry Piで動かすイメージはarmで動くイメージを探してこないといけないのが面倒ですが,これから増えていくのではないでしょうか?ビルドはとても遅い*4ので,お茶でも入れてアニメでも見るのが良いと思います.
新入生に捧ぐPCの選び方 -個人的おすすめ機種編-
前回の投稿では選ぶ基準について話しましたが,今回は「とは言え一から探すの面倒なんだけど安定なのは?」みたいな人向けのPCを独断と偏見で選んでみました.
価格帯別個人的おすすめ
自分の予算に応じたところを見てください.
25万円~
金に糸目をつけない!とにかく最高のPCが欲しい!という金額ですかね.だいたい困ることの無い金額です.
Let’s Note SZ6
カスタマイズ項目は多いですが,基本スペックで既に十分これまでに述べた項目を満たしています.必要に応じてバッテリーパック(SまたはL.Lの方が駆動時間が長くなるが本体から出っ張る),光学ドライブ(DVDやBDを読み込むドライブ)の有無を選択すると良いでしょう.
見た目はスタイリッシュさに欠けますが,とてつもなく頑丈なので壊れるのが不安な人はこれにしましょう.
VAIO Z フリップモデル
2モデルあるVAIO Zの中でも,画面が一回転してタブレットとしても使えるようになるモデルです.こちらも既に基本スペックが高くカスタマイズする必要は少ないですが,SSDを第三世代ハイスピードSSDにしておくと良いでしょう.
また,初期状態では一年保証しか付いていないので,三年ワイド保証をつけることをオススメします.VGAアダプターも買うのが吉です.
20万円~
MacBook Pro 13インチモデル
何かと話題のタッチバーの有無をどうするかは悩みどころですが,タッチバー無しモデルは一段階劣るCPUを搭載すること,USBが2口しかない(タッチバー付きは4口ある)ことは一応念頭に置いておくと良いでしょう.また他にアダプターをいろいろ買う必要があるので,本体価格+2万円くらいは見込んでおきましょう. AppleCare(保証)の加入は自由ですが,これには技術的サポートも含まれているので不安な人は加入するのが無難です.
よくMacでも大丈夫でしょうかと聞いてくる人が居ますが,それを聞いている時点でどちらでも変わらないと答えさせていただきます.一応自分の課程の先輩に当たる人に,Windows/Macで困ったことはあるか聞いておくのが吉です.
また,大学生協のカタログにもおそらくMacBookProが掲載されますが,旧モデルかどうかチェックをした方が良いです.
VAIO Z クラムシェルモデル
画面が回転しない通常のノートパソコンになります.性能に関してはほとんどフリップモデルと変わりませんが,メモリは8GBに,第三世代ハイスピードSSDを選択すると良いでしょう.VGAアダプターも買うのが吉です.
Let’s Note RZ6
おそらく生協のカタログに掲載されるレッツノートはこっち…だと思います.生協でレッツノートを買うのは悪い選択肢では無いです.とくに最近は普通に買うより安いので.
10.1型とかなり小型なため,キーボードが少し手狭なのがネックですが,軽さと小ささから持ち運びは楽です.
ThinkPad X1 Carbon
http://shopap.lenovo.com/jp/notebooks/thinkpad/x-series/x1-carbon/?ipromoID=jp_pub_top_hp_b1
2017年発売のモデルがオススメです.14インチの割に本体がコンパクトで,カーボンを使用した筐体のため軽いのが特徴です.
15万円~
かなり選択肢が増えてくる価格帯になります.紹介文は最小限に抑えるので気になったら後は自分で調べるなり詳しい人に聞くなりしましょう.
VAIO S11/S13
S11は11インチ,S13は13インチのモデルになります.どちらもCore i5 + メモリ8GB + 第二世代ハイスピードSSD + 3年ワイド保証の構成がオススメです.
MacBook
すごく薄いあのMacです.アダプターの購入が必須ですが頻繁に持ち運ぶ人には良い選択肢となるでしょう.
XPS 13
ベゼル幅*1が狭いため,13インチのモデルにしては本体の幅が小さくコンパクトなのが特徴です.これも同様にCore i5 + メモリ8GBの構成がオススメです.
ThinkPad X270
http://shopap.lenovo.com/jp/notebooks/thinkpad/x-series/x270/
ビジネス用ノートパソコンとして今でも一定の地位を誇るThinkPadシリーズの中でもコンパクトなものです.Core i5 + メモリ8GB + SSD 256GB + フルHDディスプレイあたりを選択するのが良いと思います.
HP Spectre x360
HP Spectre x360 - ノートパソコン | 日本HP
価格の割にスペックが非常に高いのが魅力です.下位モデルですら必要十分な性能を備えています.薄いですが意外と重量があります.
10万円〜
おとなしくバイトしてあと5万貯めてから買いましょう.
5万円〜
おとなしくバイトしてあと10万貯めてから買いましょう.
5万円未満
15万円貯めてから考えましょう,と言いたいところですが,どうしてもそこまでの余裕はないけど持ち運びできるもので比較的まともなPCが欲しいという需要はあると思うので,少しだけ載せておきます.
過度な期待は禁物です.動くだけマシくらいに思ってください.
Ideapad 310S
HDDではなくSSD搭載のモデルを選びましょう.後述のInspiron11の用に安価な11インチ台のノートPCは派手な見た目が多いですが,これはもう少し落ち着いたデザインをしています.
Inspiron 11 3000
11インチの安価なモデルです.一番安いモデルではなく,メモリ4GB,SSD 128GB搭載のモデルを選んでください.
LuvBook LB-C240B-SSD
こちらも予算ギリギリになりますがSSDを搭載している機種になります.
個人的におすすめしないもの
Surfaceシリーズ
Microsoftの出しているタブレットにもなるノートパソコンですが,キーボードの形状や本体への接続方法等から置き場所を選ぶPCになっています.講義室の狭い机や,膝の上に載せて使用するといった用途に向かないので外しました.
まとめ
最低でも15万以上出してまともなものを買わないと,中途半端に大学3回生とかで新しいPCを買う羽目になって結果的に高く付くといったことになりかねません. 最初くらいお金をかけてもいいのでは.
最高の大学生活をお過ごしください.
*1:ディスプレイの周囲の枠
新入生に捧ぐPCの選び方 -Office・アクセサリ編-
上記記事の続きみたいなものです.
Officeソフトウェアについて
一口に「Office」と言いますがだいたいの場合これは「Microsoft Office」を指しています.Microsoft社がリリースしているOfficeソフトウェアで,よく聞くWordやExcel,PowerPointなどを含んでいます.たまに引っかけのように「Kingsoft Office」というKingsoft社のOfficeを搭載して「Office搭載PCです!」と言っているPCもあります.注意しましょう.
Officeってそもそも何?
これは主に文書作成(Word),表計算等の数値処理(Excel),プレゼンテーション(PowerPoint)用のソフトウェアの総称です.いくつかのバージョンが存在します.
- Microsoft Office Professional(全部入り)
- Microsoft Office Home&Business(必要な物がだいたい揃ってる)
- Microsoft Office Personal(PowerPointが入ってない)
Microsoft以外にも無料のLibreOfficeなどがあり,単なるレポート作成程度であれば高価なMicrosoft Officeを購入しなくても問題ありません.
Officeって必要?
これは賛否両論あると思いますが,「あった方が良い」です.代替手段はいくつもありますが,普及率という点で他を大きく圧倒します.数人での共同作業などには必須と言えるでしょう.
ただし,これは購入時に必ず買わなければいけないという意味ではありません.後からでもインストールできますし,すぐ必要ということもおそらくないです.
また,大学のPCに入学後割り当てられる自分のアカウントでログインすることでOfficeを使うことも出来ます.
買い方が色々あってよく分からない…
大きく分けて3種類の買い方があります.(~~はHome&BusinessとかProfessionalとかに適宜読み替えてください)
- Microsoft Office ~~ Premium
- ずっと最新版を使える.
- 一台でのみ使える.
- PCを買い換えても次のPCに入れ替えたりは出来ない.
- PC付属の場合だいたいこれ
- Microsoft Office 2016 ~~
- Microsoft Office 365 Solo
1つ目のPremiumに関しては最初にPCに付属している場合を除いて購入できない形態になっています.後の二つは家電量販店や大学生協,またネット通販でも買うことが出来ます.2つめに関してはAcademicパッケージがあるので学生はそれを買った方がお得です.
最初から付けておく方が安くなる場合も,後から購入した方が安くなる場合もあります.特に二台にインストールしたいとか,MacもWindowsも持っているという人はよく考えてどのタイプで購入するか決めましょう.
MacにOfficeはないの?
MacにはデフォルトでiWorkと呼ばれるソフトウェアたちがインストールされています.これにはPagesやNumbers,Keynote(それぞれWord,Excel,PowerPointみたいなソフト)が含まれています.互換性があるとAppleは言っていますが,Mac向けのMicrosoft Officeを使うことをオススメします.
生協や家電量販店でMicrosoft Office 2016 for Macのアカデミック版が発売されています.他には上記で述べたOffice 365 SoloであればMac一台,Windows一台にそれぞれMac版,Windows版のOfficeをインストールできます.
アクセサリについて
スマートフォンのケースやフィルムのように,ノートPCにも様々なアクセサリがあります.個人的には保護フィルムは必要ない*1と思っているのでここでは触れませんが,必要な人は必要に応じて購入してください.
VGAアダプター
大学でプレゼンテーションなどをするとき大抵プロジェクターでスクリーンに投影するのですが,接続端子がいわゆるD-subやVGAと呼ばれるものになります.最近の薄型モバイルノートパソコンでは搭載されないことが多いため,買っておくと良いかと思います.
家電量販店にPCを持って行ってこれで使えるVGAアダプターを出してくれと言えば売ってくれます.
ケース(またはカバー)
本体に傷が入るのが嫌という人は買うべきだと思います.MacBook等を除いて本体に取り付けるハードカバーなどはあまり種類がないので,スリーブ状のケースに入れた上で鞄に入れる,または別でカバンを持つことになりますが,どちらも携帯性が損なわれるので個人的には余り好きではないです*2.
壊れるときはケースに入れていても壊れるので,入れておけば絶対安全というわけではないです.
USBアダプタ
最近ではMacBookに代表されるように,USB Type-Cと呼ばれる新しいUSB端子しか搭載していない機種が増えてきました.これらには従来のUSBメモリを挿して使うことが出来ないので,必要に応じて変換アダプタを買う必要が出てきます.
まとめ
- Officeは買えるなら買っておこう.無理してまで今すぐ買う必要は無い.
- VGAアダプターはほぼ必須.
- USB Type-Cしかないノートパソコンでは変換アダプタを持っておくと便利
こっちの記事もついでにどうぞ.