Kaynağa Gözat

[git-bridge] migrate pipeline to Jenkins (#28763)

* [git-bridge] migrate pipeline to Jenkins

* [terraform] remove cloud build trigger for git-bridge

GitOrigin-RevId: fdf842a561c00a609f2de0cab894a761900322c6
Jakob Ackermann 10 ay önce
ebeveyn
işleme
c621d0f318

+ 1 - 0
services/git-bridge/.jenkinsIncludeFile

@@ -0,0 +1 @@
+services/git-bridge/**

+ 88 - 0
services/git-bridge/Jenkinsfile

@@ -0,0 +1,88 @@
+pipeline {
+  agent {
+    node {
+      label 'jenkins-agent-web'
+      customWorkspace '/workspace'
+    }
+  }
+  options {
+    timestamps()
+    parallelsAlwaysFailFast()
+    timeout(time: 15, unit: 'MINUTES')
+  }
+  environment {
+    BRANCH_NAME = "${env.CHANGE_BRANCH ? env.CHANGE_BRANCH : env.BRANCH_NAME}"
+    JENKINS_BUILD_NUMBER = "${BUILD_NUMBER}"
+    BUILD_NUMBER = "${SHORT_SHA}_${BUILD_NUMBER}"
+    COMMIT_SHA = "${GIT_COMMIT}"
+    SHORT_SHA = "${GIT_COMMIT.take(7)}"
+  }
+  stages {
+    stage('Stage 1') {
+      parallel {
+        stage('Build') {
+          steps {
+            dir('services/git-bridge') {
+              sh 'make docker_build_base'
+            }
+          }
+        }
+        stage('Install monorepo') {
+          steps {
+            sh 'make monorepo_setup'
+          }
+        }
+      }
+    }
+    stage('Stage 2') {
+      parallel {
+        stage('Build production and push') {
+          steps {
+            dir('services/git-bridge') {
+              sh 'make docker_build'
+              sh 'make push_branch'
+            }
+          }
+        }
+        stage('Format Java') {
+          steps {
+            dir('services/git-bridge') {
+              sh 'make docker_format'
+            }
+          }
+        }
+        stage('Format Jenkinsfile') {
+          steps {
+            sh 'bin/run monorepo npm run format:jenkins'
+          }
+        }
+        stage('Test') {
+          steps {
+            dir('services/git-bridge') {
+              sh 'make docker_test'
+            }
+          }
+        }
+      }
+    }
+    stage('Push Production') {
+      steps {
+        dir('services/git-bridge') {
+          sh 'make push'
+        }
+      }
+    }
+  }
+  post {
+    // Collect junit test results for both success and failure case.
+    always {
+      junit checksName: 'git-bridge test results', testResults: 'services/git-bridge/target/surefire-reports/*.xml'
+    }
+    cleanup {
+      dir('services/git-bridge') {
+        sh 'make clean_ci'
+      }
+      sh 'make clean_jenkins'
+    }
+  }
+}

+ 29 - 0
services/git-bridge/Makefile

@@ -3,6 +3,17 @@
 MVN_OPTS := --no-transfer-progress
 MVN_TARGET := target/writelatex-git-bridge-1.0-SNAPSHOT-jar-with-dependencies.jar
 
+export BUILD_NUMBER ?= local
+export BRANCH_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
+export COMMIT_SHA ?= $(shell git rev-parse HEAD)
+PROJECT_NAME = git-bridge
+
+IMAGE_CI ?= ci/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER)
+IMAGE_REPO ?= us-east1-docker.pkg.dev/overleaf-ops/ol-docker/$(PROJECT_NAME)
+IMAGE_REPO_BRANCH ?= $(IMAGE_REPO):$(BRANCH_NAME)
+IMAGE_REPO_MAIN ?= $(IMAGE_REPO):main
+IMAGE_REPO_FINAL ?= $(IMAGE_REPO_BRANCH)-$(BUILD_NUMBER)
+
 runtime-conf:
 	/opt/envsubst < conf/envsubst_template.json > conf/runtime.json
 
@@ -16,10 +27,17 @@ $(MVN_TARGET): $(shell find src -type f) pom.xml
 
 build: $(MVN_TARGET)
 
+docker_build_base:
+	docker build --tag $(IMAGE_CI) --target base .
+
+docker_build:
+	docker build --tag $(IMAGE_REPO_BRANCH) --tag $(IMAGE_REPO_FINAL) .
 
 format:
 	mvn $(MVN_OPTS) com.spotify.fmt:fmt-maven-plugin:check
 
+docker_format:
+	docker run --rm -v $(PWD):$(PWD) -w $(PWD) --user node $(IMAGE_CI) make format
 
 format_fix:
 	mvn $(MVN_OPTS) com.spotify.fmt:fmt-maven-plugin:format
@@ -28,6 +46,8 @@ format_fix:
 test:
 	mvn $(MVN_OPTS) test
 
+docker_test:
+	docker run --rm -v $(PWD):$(PWD) -w $(PWD) --user node $(IMAGE_CI) make test
 
 clean:
 	mvn $(MVN_OPTS) clean
@@ -36,5 +56,14 @@ clean:
 package: clean
 	mvn $(MVN_OPTS) package -DskipTests
 
+push:
+	docker push $(IMAGE_REPO_FINAL)
+
+push_branch:
+	docker push $(IMAGE_REPO_BRANCH)
+
+clean_ci:
+	-docker rmi -f $(IMAGE_CI) $(IMAGE_REPO_BRANCH) $(IMAGE_REPO_FINAL)
+	-git clean -xdf .
 
 .PHONY: run package build clean test runtime-conf