@@ -20,6 +20,7 @@ import (
20
20
"os"
21
21
"os/exec"
22
22
"path/filepath"
23
+ "runtime"
23
24
"strings"
24
25
"syscall"
25
26
@@ -662,30 +663,62 @@ func runTestsWithConfig(testParams *testParameters, testConfigArg, reportPrefix
662
663
663
664
testArgs := fmt .Sprintf ("%s %s" , ginkgoArgs , testConfigArg )
664
665
665
- kubeTestArgs := []string {
666
- "--test" ,
667
- "--ginkgo-parallel" ,
668
- "--check-version-skew=false" ,
669
- fmt .Sprintf ("--test_args=%s" , testArgs ),
666
+ // kubetest2 flags
667
+
668
+ var runID string
669
+ if uid , exists := os .LookupEnv ("PROW_JOB_ID" ); exists && uid != "" {
670
+ // reuse uid for CI use cases
671
+ runID = uid
672
+ } else {
673
+ runID = string (uuid .NewUUID ())
670
674
}
671
675
672
676
kubeTest2Args := []string {
673
677
* deploymentStrat ,
678
+ fmt .Sprintf ("--run-id=%s" , runID ),
674
679
"--test=ginkgo" ,
675
680
}
676
681
kubeTest2Args = append (kubeTest2Args , testParams .cloudProviderArgs ... )
677
682
if kubetestDumpDir != "" {
678
683
kubeTest2Args = append (kubeTest2Args , fmt .Sprintf ("--artifacts=%s" , kubetestDumpDir ))
679
684
}
680
685
kubeTest2Args = append (kubeTest2Args , "--" )
681
- if len (* testVersion ) != 0 && * testVersion != "master" {
682
- kubeTest2Args = append (kubeTest2Args , fmt .Sprintf ("--test-package-marker=latest-%s.txt" , * testVersion ))
686
+ if len (* testVersion ) != 0 {
687
+ if * testVersion == "master" {
688
+ // the kubernetes binaries should've already been built above
689
+ // or by the user if --localK8sDir was set, these binaries should be copied to the
690
+ // path sent to kubetest2 through its --artifacts path
691
+
692
+ // pkg/_artifacts is the default value that kubetests uses for --artifacts
693
+ kubernetesTestBinariesPath := filepath .Join (testParams .pkgDir , "_artifacts" )
694
+ if kubetestDumpDir != "" {
695
+ // a custom artifacts dir was set
696
+ kubernetesTestBinariesPath = kubetestDumpDir
697
+ }
698
+ kubernetesTestBinariesPath = filepath .Join (kubernetesTestBinariesPath , runID )
699
+
700
+ klog .Infof ("Copying kubernetes binaries to path=%s to run the tests" , kubernetesTestBinariesPath )
701
+ err := copyKubernetesTestBinaries (testParams .k8sSourceDir , kubernetesTestBinariesPath )
702
+ if err != nil {
703
+ return fmt .Errorf ("Failed to copy the kubernetes test binaries, err=%v" , err )
704
+ }
705
+ kubeTest2Args = append (kubeTest2Args , "--use-built-binaries" )
706
+ } else {
707
+ kubeTest2Args = append (kubeTest2Args , fmt .Sprintf ("--test-package-marker=latest-%s.txt" , * testVersion ))
708
+ }
683
709
}
684
710
kubeTest2Args = append (kubeTest2Args , fmt .Sprintf ("--focus-regex=%s" , testParams .testFocus ))
685
711
kubeTest2Args = append (kubeTest2Args , fmt .Sprintf ("--skip-regex=%s" , testParams .testSkip ))
686
712
kubeTest2Args = append (kubeTest2Args , fmt .Sprintf ("--parallel=%d" , testParams .parallel ))
687
713
kubeTest2Args = append (kubeTest2Args , fmt .Sprintf ("--test-args=%s %s" , testConfigArg , windowsArgs ))
688
714
715
+ // kubetest flags
716
+ kubeTestArgs := []string {
717
+ "--test" ,
718
+ "--ginkgo-parallel" ,
719
+ "--check-version-skew=false" ,
720
+ fmt .Sprintf ("--test_args=%s" , testArgs ),
721
+ }
689
722
if kubetestDumpDir != "" {
690
723
kubeTestArgs = append (kubeTestArgs , fmt .Sprintf ("--dump=%s" , kubetestDumpDir ))
691
724
}
@@ -702,3 +735,30 @@ func runTestsWithConfig(testParams *testParameters, testConfigArg, reportPrefix
702
735
703
736
return nil
704
737
}
738
+
739
+ var (
740
+ kubernetesTestBinaries = []string {
741
+ "kubectl" ,
742
+ "e2e.test" ,
743
+ "ginkgo" ,
744
+ }
745
+ )
746
+
747
+ // copyKubernetesBinariesForTest copies the common test binaries to the output directory
748
+ func copyKubernetesTestBinaries (kuberoot string , outroot string ) error {
749
+ const dockerizedOutput = "_output/dockerized"
750
+ root := filepath .Join (kuberoot , dockerizedOutput , "bin" , runtime .GOOS , runtime .GOARCH )
751
+ for _ , binary := range kubernetesTestBinaries {
752
+ source := filepath .Join (root , binary )
753
+ dest := filepath .Join (outroot , binary )
754
+ if _ , err := os .Stat (source ); err == nil {
755
+ klog .Infof ("copying %s to %s" , source , dest )
756
+ if err := CopyFile (source , dest ); err != nil {
757
+ return fmt .Errorf ("failed to copy %s to %s: %v" , source , dest , err )
758
+ }
759
+ } else {
760
+ return fmt .Errorf ("could not find %s: %v" , source , err )
761
+ }
762
+ }
763
+ return nil
764
+ }
0 commit comments