Closed oomichi closed 6 years ago
e2e のために必要なバイナリは kubetest のみ? kubetest のみにビルド方法を調べ、テストを実行してみる。
make quick-release 実行時の cmd で表示されるものを見ると、kubetest を含めテストに必要そうなバイナリ作成処理はなさそう・・本当に quick-release は必要?
./vendor/k8s.io/code-generator/cmd/deepcopy-gen
./vendor/k8s.io/code-generator/cmd/defaulter-gen
./vendor/k8s.io/code-generator/cmd/conversion-gen
./vendor/k8s.io/kube-openapi/cmd/openapi-gen
cmd/kube-proxy
cmd/kube-apiserver
cmd/kube-controller-manager
cmd/cloud-controller-manager
cmd/kubelet
cmd/kubeadm
cmd/hyperkube
cmd/kube-scheduler
cmd/kube-proxy
cmd/kubeadm
cmd/kubelet
cmd/kubectl
cmd/gendocs
cmd/genkubedocs
cmd/genman
cmd/genyaml
cmd/genswaggertypedocs
cmd/linkcheck
cmd/kubemark
cmd 配下以外に関連しそうなバイナリビルドがあった。
test/e2e/e2e.test
vendor/github.com/onsi/ginkgo/ginkgo
test/e2e_node/e2e_node.test
make quick-release 実行直後にテスト実行を試みた結果 → 全てビルド実行しても同じ結果。ほかにエラー原因がありそう
$ go run hack/e2e.go -- --provider=skeleton --test --test_args="--ginkgo.focus=1\spod\sto\s2\spods --ginkgo.dryRun=true"
2018/08/01 00:10:26 e2e.go:79: Calling kubetest --verbose-commands=true --provider=skeleton --test --test_args=--ginkgo.focus=1\spod\sto\s2\spods --ginkgo.dryRun=true...
2018/08/01 00:10:26 process.go:153: Running: ./hack/e2e-internal/e2e-status.sh
Skeleton Provider: prepare-e2e not implemented
error: server version (&version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}) differs from client version (version.Info{Major:"1", Minor:"12+", GitVersion:"v1.12.0-alpha.0.2593+99133f510d8734", GitCommit:"99133f510d87347b45e87fc7a899cb5ac6daa7f1", GitTreeState:"clean", BuildDate:"2018-07-31T23:50:42Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"})!
2018/08/01 00:10:26 process.go:155: Step './hack/e2e-internal/e2e-status.sh' finished in 150.752848ms
2018/08/01 00:10:26 main.go:309: Something went wrong: encountered 1 errors: [error during ./hack/e2e-internal/e2e-status.sh: exit status 1]
2018/08/01 00:10:26 e2e.go:81: err: exit status 1
exit status 1
これか
error:
server version (&version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}) differs from
client version (version.Info{Major:"1", Minor:"12+", GitVersion:"v1.12.0-alpha.0.2593+99133f510d8734", GitCommit:"99133f510d87347b45e87fc7a899cb5ac6daa7f1", GitTreeState:"clean", BuildDate:"2018-07-31T23:50:42Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"})!
ふーん、テスト対象 kubernetes クラスタと e2e テストのバイナリのバージョンが異なっていると テスト失敗になるよう変更があったみたい。 e2e テストリポジトリで v1.11.1 をチェックアウトしてビルドする必要がありそう。
上記のコードを見ると、e2e テストでクライアントコードを使っていることがわかる。 つまり、kubetest 以外にもビルドする必要があるものがあり、quick-release を避けるのは あまりリーズナブルではなさそう。
上記コメントにより、本 Issue は Drop する。 ただし、テスト対象 k8s クラスタに合わせて e2e テストのビルドを行う手順は追加する必要が あるため、README 更新に合わせて本 Issue をクローズする。
z バージョンまで合わせる必要がある模様。 ちょっと厳しすぎないか!?
error:
server version (&version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}) differs from
client version (version.Info{Major:"1", Minor:"11+", GitVersion:"v1.11.2-beta.0.34+8b3d76091fd500-dirty", GitCommit:"8b3d76091fd500b7c59c83e113c9048ee612b205", GitTreeState:"dirty", BuildDate:"2018-08-01T00:55:03Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"})!
kubectl version で得られる server 側の情報から GitCommit を特定、それを e2e 用 k8s.io/kubernetes でチェックアウトする。
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:53:20Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
$
この方法でも駄目。dirty とかいうバージョンになってしまう!
$ go run hack/e2e.go -- --provider=skeleton --test --test_args="--ginkgo.focus=1\spod\sto\s2\spods --ginkgo.dryRun=true"
2018/08/01 01:29:24 e2e.go:79: Calling kubetest --verbose-commands=true --provider=skeleton --test --test_args=--ginkgo.focus=1\spod\sto\s2\spods --ginkgo.dryRun=true...
2018/08/01 01:29:25 process.go:153: Running: ./hack/e2e-internal/e2e-status.sh
Skeleton Provider: prepare-e2e not implemented
error: server version (&version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}) differs from client version (version.Info{Major:"1", Minor:"11+", GitVersion:"v1.11.1-dirty", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"dirty", BuildDate:"2018-08-01T01:20:19Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"})!
2018/08/01 01:29:25 process.go:155: Step './hack/e2e-internal/e2e-status.sh' finished in 236.898277ms
2018/08/01 01:29:25 main.go:309: Something went wrong: encountered 1 errors: [error during ./hack/e2e-internal/e2e-status.sh: exit status 1]
2018/08/01 01:29:25 e2e.go:81: err: exit status 1
exit status 1
Slackで聞いてみよう → 不要なファイルが k/k リポ上にあったから。削除したら dirty が消えてテスト実行できた。
e2e テストの準備として
を実施するが、kube-proxy, kube-apiserver などのビルドも行われるため時間がかかる。 そもそも既存 kubernetes クラスタのテストのためなら、kubernetes コンポーネントのビルドは不要。 準備時間削減方法を調べる。