Giter VIP home page Giter VIP logo

duci's Introduction

Hi there 👋

duci's People

Contributors

dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar duck8823 avatar wasanx25 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

duci's Issues

再利用しやすいように

こんな感じにしようと思いました。

minimal-ci
├── infrastructure  # 共通の基盤部分
├── service         # 再利用しやすい形でさらにパッケージわける
├── presentation    
│   └── controller  # ≒ hander
└── main.go

非同期にする

webhooks が timeout になるので非同期にする。
wenhooks はジョブのIDを返して、後から結果とログを取得できるようにしよう。

タスク実行準備の高速化

いくつか高速化をためす

  • イメージ名をリポジトリで固定してキャッシュを利用する
  • Git Clone 時のオプション( depth とか )

ログをファイルに保存する

今はインメモリな leveldb に保存しているが、ファイルに保存できるようにする。
ファイルパスは設定ファイルで変更できるようにする。

GitLab対応

GitLabにも対応したい。

  • Webhooks
  • Commit Status

コミットハッシュをチェックアウトするように

指定されたブランチのチェックアウト後最新のコミットハッシュに対して実行しているが、
Runner にコミットハッシュを渡してそれをチェックアウトできるようにする。
それを使って Runner内で commit status を生成するようにし、プレゼンテーション層での commit status の作成はしないようにする。

ChecksAPI

GitHub の ChecksAPI について調べる。
使えそうだったら使う。

サブコマンドで GItHub の設定をできるようにしたい

  • SSH Key の生成と設定
  • Webhooks の設定

が サブコマンド でできると導入コストがグッと減っていいと思った。
イメージとしては

duci init

で ssh key を作って GitHub に登録

duci add duck8823/duci

で webhooks に登録

duci server

で サーバー起動

multi stage build

アプリ起動用の Dockerfile は multi stage build を利用する

waiting... のまま実行されないケース

以下のログのあとジョブが実行されない。

[08654e00-ac53-11e8-87b2-90223981f97b] 2018-08-30 12:48:48.871 [INFO] Compressing objects: 100% (170/170)
[08654e00-ac53-11e8-87b2-90223981f97b] 2018-08-30 12:48:48.871 [INFO] Compressing objects: 100% (170/170), done.
[08654e00-ac53-11e8-87b2-90223981f97b] 2018-08-30 12:48:48.983 [INFO] Total 240 (delta 95), reused 146 (delta 47), pack-reused 0
[08654e00-ac53-11e8-87b2-90223981f97b] 2018-08-30 12:48:48.999 [ERROR] reference not found
github.com/duck8823/duci/infrastructure/git.(*sshGitClient).Clone
	/home/ubuntu/go/src/github.com/duck8823/duci/infrastructure/git/git.go:37
github.com/duck8823/duci/application/service/runner.(*DockerRunner).run
	/home/ubuntu/go/src/github.com/duck8823/duci/application/service/runner/runner.go:85
github.com/duck8823/duci/application/service/runner.(*DockerRunner).Run.func1
	/home/ubuntu/go/src/github.com/duck8823/duci/application/service/runner/runner.go:50
runtime.goexit
	/home/ubuntu/.goenv/versions/1.10.3/src/runtime/asm_amd64.s:2361
github.com/duck8823/duci/application/service/runner.(*DockerRunner).run
	/home/ubuntu/go/src/github.com/duck8823/duci/application/service/runner/runner.go:87
github.com/duck8823/duci/application/service/runner.(*DockerRunner).Run.func1
	/home/ubuntu/go/src/github.com/duck8823/duci/application/service/runner/runner.go:50
runtime.goexit
	/home/ubuntu/.goenv/versions/1.10.3/src/runtime/asm_amd64.s:2361
[08654e00-ac53-11e8-87b2-90223981f97b] 2018-08-30 12:48:49.216 [ERROR] Failed to create commit status: POST https://api.github.com/repos/duck8823/duci/statuses/0000000000000000000000000000000000000000: 422 No commit found for SHA: 0000000000000000000000000000000000000000 []

Waiting の Commit Status をつける

現在並列数を指定しているが、前のジョブが終わってから次のジョブを実行して初めて pending の Commit Status がつく。
キューに入ったことが分かりづらいのでコミットステータスをつけるようにする。

実行時に Volumes を渡せるようにする

テスト実行時に ホスト と volume を共有したい。
(ホスト依存のテスト書いてて本来はよくないけどそれは別でやる)

.duci/config.yml に以下のように記述するとコンテナに渡すようにする。

---
volumes:
  - /path/to/host:/path/to/container:ro

ログURLを Commit Status に設定する

GitHubからリンクを辿れるようにしよう。
ホストURLはリクエストの中に含まれるものを使うか、設定ファイルで管理できるようにするか。

テストのcleanup

コンテナとイメージの削除をしないとディスクが圧迫している。

設定ファイルほしい

各種設定ファイルで設定できるといいなあと思った。

  • サーバー起動時オプション ( 全体設定 )
    • working directory #26
    • port number #26
    • path of ssh private key #26
    • timeout #29
    • concurrency (同時ビルド数)
  • リポジトリオプション ( 対象での設定 )
    • path of dockerfile #27
    • timeout ( override )
    • volume 指定 ( cache的に使える )

ログを取得できるように

#1 で非同期にしたけど、後からログが取得できないので取得できるようにしてあげよう。
リクエストごとに生成する UUID でも返して、 logs/{UUID} あたりで取得できるようにすればいい。

go get で失敗している

infrastructure/docker/docker.go:9:2: code in directory /go/src/github.com/moby/moby/client expects import "github.com/docker/docker/client"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.