droneをgithubで動かしてみたかったので、ちょっと試してみる。 github上でgoのテストをdroneで動かすことをゴールとしたい。
ディレクトリ・ファイル作成
drone_test ├── docker-compose.yml ├── hello.go └── hello_test.go
docker-compose.yml
version: '2' services: drone-server: image: drone/drone:0.7.3 ports: - 3000:8000 volumes: - .:/var/lib/drone/ restart: always environment: - DRONE_OPEN=true - DRONE_HOST=${DRONE_HOST} - DRONE_GITHUB=true - DRONE_GITHUB_URL=${DRONE_GITHUB_URL} - DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT} - DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET} - DRONE_SECRET=${DRONE_SECRET} - DRONE_GITHUB_PRIVATE_MODE=true drone-agent: image: drone/drone:0.7.3 command: agent restart: always depends_on: - drone-server volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_SERVER=ws://drone-server:8000/ws/broker - DRONE_SECRET=${DRONE_SECRET}
${}は後に.env
で指定する。後に記述。
hello.go
package main import "fmt" func getHello() string { return "Hello World" } func main() { fmt.Println(getHello()) }
hello_test.go
package main import ( "testing" ) func TestHello(t *testing.T) { if "Hello World" != getHello() { t.Fatal("failed test") } }
Docker起動
docker-compose.ymlがあるディレクトリで以下を実行。
docker-compose up
確認
以下にアクセスしてdroneの画面が出るか確認。
http://localhost:3000
グローバルなURLを取得する
グローバルなURL出ないとgithubとうまく連携できないようなので、それを取得する。
brew cask install ngrok
ngrok http 3000
ポート番号はローカルで使用しているアプリケーションのポート番号を指定。
ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Version 2.2.8 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://○○○○○○○.ngrok.io -> localhost:3000 Forwarding https://○○○○○○○.ngrok.io -> localhost:3000 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
http://○○○○○○○.ngrok.io
がlocalhost:3000と繋がっているので、ローカルを立ち上げたら、http://○○○○○○○.ngrok.io
でアクセスできるはず。
docker-compose up
してからアクセスしてみてdroneの画面が表示されればok。
.envを作成する
.envを作成し以下の記述をする
DRONE_GITHUB_URL=githubのurl DRONE_GITHUB_CLIENT=後に記述 DRONE_GITHUB_SECRET=後に記述 DRONE_SECRET=文字列 DRONE_HOST=ngrokで生成されたURL
DRONE_GITHUB_CLIENTとDRONE_GITHUB_SECRETの値を取得する
https://github.com/settings/developersからDRONE_GITHUB_CLIENTとDRONE_GITHUB_SECRETの値を取得する。
上記のようにして登録。 Client IDとClient Secretというものが表示されるので、それをそれぞれDRONE_GITHUB_CLIENTとDRONE_GITHUB_SECRETに割り当てる。
DRONE_SECRETはなんでもいいのでハッシュを設定。
ruby -r securerandom -e "puts SecureRandom.urlsafe_base64"
とりあえずこれで作る。
アプリケーションを認証する
ngrokで割り当てられたurl + /login
上記にアクセスして認証する。
設定したらログインして、droneと連携したいリポジトリにチェックする。
.drone.ymlを記述する
.drone.ymlに書いたものが、droneで実行される。 droneでテストを実行してみたいので、テスト実行のコマンドを記述する。作る箇所はアプリケーションのディレクトリ直下。
pipeline: testing: image: golang commands: - go build - go test
githubで確かめる
.drone.ymlを書いたらpushしてgithub上で期待通りに動くか確かめる。
こんな表示が出てくるはず。
ローカルでdroneを使う
ローカルでdroneを実行することもできる。
brew tap drone/drone brew install drone drone --version //これでバージョンが表示されればok
下記で実行。
drone exec
[testing:L0:0s] + go build [testing:L1:0s] + go test [testing:L2:0s] PASS [testing:L3:0s] ok _/drone/src 0.005s
大丈夫そうかな。