From c621d0f31834aeff668c228201cff78c745ebf29 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Mon, 6 Oct 2025 13:20:13 +0200 Subject: [PATCH] [git-bridge] migrate pipeline to Jenkins (#28763) * [git-bridge] migrate pipeline to Jenkins * [terraform] remove cloud build trigger for git-bridge GitOrigin-RevId: fdf842a561c00a609f2de0cab894a761900322c6 --- services/git-bridge/.jenkinsIncludeFile | 1 + services/git-bridge/Jenkinsfile | 88 +++++++++++++++++++++++++ services/git-bridge/Makefile | 29 ++++++++ 3 files changed, 118 insertions(+) create mode 100644 services/git-bridge/.jenkinsIncludeFile create mode 100644 services/git-bridge/Jenkinsfile diff --git a/services/git-bridge/.jenkinsIncludeFile b/services/git-bridge/.jenkinsIncludeFile new file mode 100644 index 0000000000..8c1da42374 --- /dev/null +++ b/services/git-bridge/.jenkinsIncludeFile @@ -0,0 +1 @@ +services/git-bridge/** diff --git a/services/git-bridge/Jenkinsfile b/services/git-bridge/Jenkinsfile new file mode 100644 index 0000000000..758264446c --- /dev/null +++ b/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' + } + } +} \ No newline at end of file diff --git a/services/git-bridge/Makefile b/services/git-bridge/Makefile index 2fd30f0fa5..edd8ab392f 100644 --- a/services/git-bridge/Makefile +++ b/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