summaryrefslogtreecommitdiff
path: root/build-aux/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'build-aux/README.md')
-rw-r--r--build-aux/README.md131
1 files changed, 131 insertions, 0 deletions
diff --git a/build-aux/README.md b/build-aux/README.md
new file mode 100644
index 000000000..72cef94b8
--- /dev/null
+++ b/build-aux/README.md
@@ -0,0 +1,131 @@
+# CouchDB and Jenkins CI
+
+In 2019, ASF and CloudBees reached an agreement to allow
+the Foundation to use CloudBees Core to have a farm of managed Jenkins
+masters. This allows the ASF to give larger projects their own dedicated
+Jenkins master, which can be custom configured for the project. They can
+readily manage this farm of Jenkins masters centrally, including push
+updates to all masters and their plugins. Naturally, this also reduces
+contention, as well as providing increased security for project-level
+credentials. CouchDB is the first project to use this setup, via
+https://ci-couchdb.apache.org/ (aka https://jenkins-cm1.apache.org/)
+
+Only members of the ASF LDAP group `couchdb-pmc` have write access to
+the Jenkins CI server, and all jobs are set to not trust changes to the
+Jenkinsfile from forked repos (see below).
+
+Further, IBM is sponsoring CouchDB with cloud-based worker nodes, for
+the project's exclusive use. Combined with the FreeBSD and OSX nodes the
+project already had, this will provide the necessary compute resources
+to meet the needs of the project for some time to come.
+
+# Jenkins Configuration
+
+All jobs on the new Jenkins master are contained in a CouchDB folder.
+Credentials for the project are placed within this folder; this is a
+unique capability of CloudBees Core at this time.
+
+## Pull Requests
+
+[Blue Ocean link](https://ci-couchdb.apache.org/blue/organizations/jenkins/jenkins-cm1%2FPullRequests/activity/)
+
+To implement build-a-PR functionality in the same way that Travis
+performs builds, Jenkins offers the Multibranch Pipeline job. Here's how
+it's configured for CouchDB through the GUI:
+
+* Job name: PullRequests (jobs shouldn't have spaces in them, because
+ the job name is used for workspace path naming.)
+* Display Name: "Pull Requests"
+* Description: "This job builds all GitHub pull requests against
+ apache/couchdb."
+* Branch sources: Github
+ * Credentials: a GitHub API key from wohali. These credentials are
+ stored in the top-level Jenkins CouchDB folder on the server.
+ The API token credentials are `user:email` and `repo:status`.
+ * URL https://github.com/apache/couchdb
+ * Behaviors
+ * Discover branches: Exclude branches that are also filed as PRs
+ * Discover PRs from origin: Merging the PR with the current target
+ branch revision
+ * Discover PRs from works: Merging the PR with the current target
+ branch revision, trust Nobody [2]
+ * Advanced clone behaviours:
+ * Fetch tags
+ * Clear "Shallow clone" [1]
+ * Clean before checkout [1]
+ * Prune stale remote-tracking branches
+ * Property strategy: All branches get the same properties
+* Build Configuration
+ * Mode: by Jenkinsfile
+ * Script path: `build-aux/Jenkinsfile.pr`
+* Scan Repository Triggers
+ * Periodically if not other wise run
+ * Interval: 1 day (do not set this too high, GitHub has an API token
+ throttle that can cause issues!)
+* Orphaned Item Strategy
+ * Discard old items
+ * Days to keep old items: <blank>
+ * Max # of old items to keep: 10
+* Everything else set as defaults.
+
+[1]: https://issues.jenkins-ci.org/browse/JENKINS-44598 explains why we have the build set to Clean Before Checkout every time, and why clones are not shallow.
+
+[2]: https://issues.apache.org/jira/browse/INFRA-17449 explains why "Discover pull requests from forks/Trust" has been set to "Nobody."
+
+## Full Platform Builds on `main` and release branches
+
+[![main branch status](https://ci-couchdb.apache.org/job/jenkins-cm1/job/FullPlatformMatrix/job/main/badge/icon?subject=main)](https://ci-couchdb.apache.org/blue/organizations/jenkins/jenkins-cm1%2FFullPlatformMatrix/activity?branch=main)
+[![3.x branch status](https://ci-couchdb.apache.org/job/jenkins-cm1/job/FullPlatformMatrix/job/3.x/badge/icon?subject=3.x)](https://ci-couchdb.apache.org/blue/organizations/jenkins/jenkins-cm1%2FFullPlatformMatrix/activity?branch=3.x)
+
+Our original Jenkins job (formerly `/Jenkinsfile`) is now
+`build-aux/Jenkinsfile.full`. This builds CouchDB on `main`, all of
+our release branches (`2.*`, `3.*`, etc.) as well as any branch prefixed with
+`jenkins-` for testing on a wide variety of supported operating systems.
+
+Settings are as follows:
+
+* Job name: FullPlatformMatrix (jobs shouldn't have spaces in them, because
+ the job name is used for workspace path naming.)
+* Display Name: "Full Platform Builds"
+* Description: "This job builds on our master and release branches,
+ and builds packages on all."
+* Branch sources: Github
+ * Credentials: a GitHub API key from wohali. These credentials are
+ stored in the top-level Jenkins CouchDB folder on the server.
+ The API token credentials are `user:email` and `repo:status`.
+ * URL https://github.com/apache/couchdb
+ * Behaviors
+ * Discover branches: All branches
+ * Filter by name (with wildcards): Include: master 2.*.x 3.*.x 4.*.x jenkins-*
+ * Advanced clone behaviours:
+ * Fetch tags
+ * Clear "Shallow clone" [1]
+ * Clean before checkout [1]
+ * Prune stale remote-tracking branches
+ * Property strategy: All branches get the same properties
+* Build Configuration
+ * Mode: by Jenkinsfile
+ * Script path: `build-aux/Jenkinsfile.pull`
+* Scan Repository Triggers
+ * none
+* Orphaned Item Strategy
+ * Discard old items
+ * Days to keep old items: <blank>
+ * Max # of old items to keep: 10
+* Everything else set as defaults.
+
+## Other Resources
+
+The [apache/couchdb-ci](https://github.com/apache/couchdb-ci) repo contains the
+dockerfiles that we use to generate the container images used for our
+container-based builds. These images are hosted on Docker Hub in the following
+repos:
+
+* [apache/couchdbci-debian](https://hub.docker.com/r/apache/couchdbci-debian)
+* [apache/couchdbci-ubuntu](https://hub.docker.com/r/apache/couchdbci-ubuntu)
+* [apache/couchdbci-centos](https://hub.docker.com/r/apache/couchdbci-centos)
+
+The [apache/couchdb-pkg](https://github.com/apache/couchdb-ci) repo contains
+a set of helper scripts to build binary packages for Debian / CentOS / Ubuntu
+from the contents of a release tarball. The packaging stage of our "Full
+Platform Builds" pipeline clones this repo to produces the package artifacts.