Skip to content

Commit

Permalink
feat(serverless jenkins) initial spike for serverless jenkins using p…
Browse files Browse the repository at this point in the history
…row and one shot jenkins master
  • Loading branch information
rawlingsj committed Sep 11, 2018
1 parent 816ad86 commit 7f3ca75
Show file tree
Hide file tree
Showing 35 changed files with 3,708 additions and 76 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ debug

.vscode/

build/
/build/
release/
scanning/
.updatebot-repos/
Expand All @@ -33,3 +33,5 @@ myvalues.yml

# vim swap files
*.swp


2 changes: 1 addition & 1 deletion Dockerfile.jenkins-maven
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
FROM jenkinsxio/jenkins-maven:dev_2
FROM jenkinsxio/jenkins-maven:dev_11

COPY build/linux/jx /usr/bin/jx
6 changes: 3 additions & 3 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -157,12 +157,12 @@ required = [

[[constraint]]
name = "k8s.io/test-infra"
branch = "rebase3"
branch = "build_id"
source = "https://github.com/jenkins-x/test-infra.git"

# [[constraint]]
# name = "github.com/knative/build"
# branch = "master"
[[constraint]]
name = "github.com/knative/build"
branch = "master"

[prune]
non-go = true
Expand Down
9 changes: 5 additions & 4 deletions pkg/jx/cmd/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -770,17 +770,18 @@ func (o *CommonOptions) copyCertmanagerResources(targetNamespace string, ic kube
}

func (o *CommonOptions) getJobName() string {
job := os.Getenv("JOB_NAME")
if job != "" {
return job
}
owner := os.Getenv("REPO_OWNER")
repo := os.Getenv("REPO_NAME")
branch := os.Getenv("BRANCH_NAME")

if owner != "" && repo != "" && branch != "" {
return fmt.Sprintf("%s/%s/%s", owner, repo, branch)
}

job := os.Getenv("JOB_NAME")
if job != "" {
return job
}
return ""
}

Expand Down
42 changes: 41 additions & 1 deletion pkg/jx/cmd/common_install.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import (
"github.com/Pallinder/go-randomdata"
filemutex "github.com/alexflint/go-filemutex"
"github.com/blang/semver"
jenkinsv1 "github.com/jenkins-x/jx/pkg/apis/jenkins.io/v1"
"github.com/jenkins-x/jx/pkg/gits"
"github.com/jenkins-x/jx/pkg/kube"
"github.com/jenkins-x/jx/pkg/log"
"github.com/jenkins-x/jx/pkg/maven"
Expand All @@ -23,6 +25,7 @@ import (
"github.com/pborman/uuid"
"github.com/pkg/errors"
"gopkg.in/AlecAivazis/survey.v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"time"
)

Expand Down Expand Up @@ -1316,6 +1319,43 @@ func (o *CommonOptions) installProw() error {
if err != nil {
return fmt.Errorf("failed to install knative build: %v", err)
}

return nil
}

func (o *CommonOptions) createWebhookProw(gitURL string, gitProvider gits.GitProvider) error {
ns, _, err := kube.GetDevNamespace(o.KubeClientCached, o.currentNamespace)
if err != nil {
return err
}
gitInfo, err := gits.ParseGitURL(gitURL)
if err != nil {
return err
}
baseURL, err := kube.GetServiceURLFromName(o.KubeClientCached, "hook", ns)
if err != nil {
return err
}
webhookUrl := util.UrlJoin(baseURL, "hook")

hmacToken, err := o.KubeClientCached.CoreV1().Secrets(ns).Get("hmac-token", metav1.GetOptions{})
if err != nil {
return err
}
webhook := &gits.GitWebHookArguments{
Owner: gitInfo.Organisation,
Repo: gitInfo,
URL: webhookUrl,
Secret: string(hmacToken.Data["hmac"]),
}
return gitProvider.CreateWebHook(webhook)
}

func (o *CommonOptions) isProw() (bool, error) {
env, err := kube.GetEnvironment(o.jxClient, o.currentNamespace, "dev")
if err != nil {
return false, err
}

return env.Spec.TeamSettings.PromotionEngine == jenkinsv1.PromotionEngineProw, nil
}
26 changes: 5 additions & 21 deletions pkg/jx/cmd/create_env.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (
"github.com/jenkins-x/jx/pkg/log"
"github.com/jenkins-x/jx/pkg/prow"
"github.com/jenkins-x/jx/pkg/util"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

var (
Expand Down Expand Up @@ -174,10 +173,12 @@ func (o *CreateEnvOptions) Run() error {
}
gitURL := env.Spec.Source.URL
gitInfo, err := gits.ParseGitURL(gitURL)

if err != nil {
return err
}
if o.Prow {
repo := fmt.Sprintf("%s/environment-%s-%s", gitInfo.Organisation, o.Prefix, o.Options.Name)
err = prow.AddRepo(o.KubeClientCached, []string{repo}, devEnv.Spec.Namespace)
err = prow.AddEnvironment(o.KubeClientCached, []string{repo}, devEnv.Spec.Namespace)
if err != nil {
return fmt.Errorf("failed to add repo %s to prow config in namespace %s: %v", repo, env.Spec.Namespace, err)
}
Expand All @@ -193,24 +194,7 @@ func (o *CreateEnvOptions) Run() error {
}
if o.Prow {
// register the webhook
baseURL, err := kube.GetServiceURLFromName(o.KubeClientCached, "hook", o.devNamespace)
if err != nil {
return err
}
webhookUrl := util.UrlJoin(baseURL, "hook")

hmacToken, err := o.KubeClientCached.CoreV1().Secrets(o.devNamespace).Get("hmac-token", metav1.GetOptions{})
if err != nil {
return err
}

webhook := &gits.GitWebHookArguments{
Owner: gitInfo.Organisation,
Repo: gitInfo,
URL: webhookUrl,
Secret: string(hmacToken.Data["hmac"]),
}
return gitProvider.CreateWebHook(webhook)
return o.createWebhookProw(gitURL, gitProvider)
} else {
return o.ImportProject(gitURL, envDir, jenkins.DefaultJenkinsfile, o.BranchPattern, o.EnvJobCredentials, false, gitProvider, authConfigSvc, true, o.BatchMode)
}
Expand Down
71 changes: 56 additions & 15 deletions pkg/jx/cmd/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import (
"time"

"github.com/denormal/go-gitignore"
"github.com/jenkins-x/jx/pkg/prow"
)

const (
Expand Down Expand Up @@ -201,16 +202,38 @@ func (o *ImportOptions) Run() error {
o.Factory.SetBatch(o.BatchMode)

var err error
isProw := false
if !o.DryRun {
o.Jenkins, err = o.JenkinsClient()
_, _, err = o.KubeClient()
if err != nil {
return err
}

_, _, err = o.KubeClient()
_, _, err = o.JXClient()
if err != nil {
return err
}

apisClient, err := o.CreateApiExtensionsClient()
if err != nil {
return err
}
err = kube.RegisterEnvironmentCRD(apisClient)
if err != nil {
return err
}

isProw, err = o.isProw()
if err != nil {
return err
}

if !isProw {
o.Jenkins, err = o.JenkinsClient()
if err != nil {
return err
}
}
}

var userAuth *auth.UserAuth
Expand Down Expand Up @@ -360,12 +383,14 @@ func (o *ImportOptions) Run() error {
return nil
}

err = o.checkChartmuseumCredentialExists()
if err != nil {
return err
if !isProw {
err = o.checkChartmuseumCredentialExists()
if err != nil {
return err
}
}

return o.DoImport()
return o.doImport()
}

func (o *ImportOptions) ImportProjectsFromGitHub() error {
Expand Down Expand Up @@ -801,7 +826,7 @@ func (o *ImportOptions) DiscoverGit() error {
if err != nil {
return err
}
o.GitConfDir = filepath.Join(dir, ".git/config")
o.GitConfDir = filepath.Join(dir, ".git", "config")
err = o.DefaultGitIgnore()
if err != nil {
return err
Expand Down Expand Up @@ -897,14 +922,7 @@ func (o *ImportOptions) DiscoverRemoteGitURL() error {
return nil
}

func (o *ImportOptions) DoImport() error {
if o.Jenkins == nil {
jclient, err := o.JenkinsClient()
if err != nil {
return err
}
o.Jenkins = jclient
}
func (o *ImportOptions) doImport() error {
gitURL := o.RepoURL
gitProvider := o.GitProvider
if gitProvider == nil {
Expand All @@ -923,14 +941,37 @@ func (o *ImportOptions) DoImport() error {
if jenkinsfile == "" {
jenkinsfile = jenkins.DefaultJenkinsfile
}

err = o.ensureDockerRepositoryExists()
if err != nil {
return err
}

isProw, err := o.isProw()
if err != nil {
return err
}
if isProw {
// register the webhook
err = o.createWebhookProw(gitURL, gitProvider)
if err != nil {
return err
}
return o.addProwConfig(gitURL)
}

return o.ImportProject(gitURL, o.Dir, jenkinsfile, o.BranchPattern, o.Credentials, false, gitProvider, authConfigSvc, false, o.BatchMode)
}

func (o *ImportOptions) addProwConfig(gitURL string) error {
gitInfo, err := gits.ParseGitURL(gitURL)
if err != nil {
return err
}
repo := gitInfo.Organisation + "/" + gitInfo.Name
return prow.AddApplication(o.KubeClientCached, []string{repo}, o.currentNamespace)
}

// ensureDockerRepositoryExists for some kinds of container registry we need to pre-initialise its use such as for ECR
func (o *ImportOptions) ensureDockerRepositoryExists() error {
orgName := o.getOrganisationOrCurrentUser()
Expand Down
3 changes: 3 additions & 0 deletions pkg/jx/cmd/preview.go
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,9 @@ func (o *PreviewOptions) Run() error {
}

gitProvider, err := o.GitInfo.CreateProvider(authConfigSvc, gitKind, o.Git())
if err != nil {
return fmt.Errorf("cannot create git provider %v", err)
}

if prNum > 0 {
pullRequest, err := gitProvider.GetPullRequest(o.GitInfo.Organisation, o.GitInfo, prNum)
Expand Down
Loading

0 comments on commit 7f3ca75

Please sign in to comment.