|
1 | 1 | # Jenkins-based CI for the Scala project
|
2 | 2 |
|
3 |
| -What it does: |
| 3 | +Used for |
| 4 | + - Scala 2.12 / 2.13 PR validation |
| 5 | + - Scala 2.12 / 2.13 [community build](https://github.com/scala/community-builds) |
4 | 6 |
|
5 |
| -* validate all commits, including the ones in pull requests |
6 |
| -* run the [community build](https://github.com/scala/community-builds) |
7 |
| -* build nightly releases |
8 |
| -* run scripts at release time |
| 7 | +Old documentation in [doc](doc/) directory; some pieces are still relevant, some are outdated. |
9 | 8 |
|
10 |
| -To learn more, see the doc directory, beginning with |
11 |
| -[overview.md](doc/overview.md). |
| 9 | +## History |
| 10 | + |
| 11 | +The AWS infra was originally deployed and maintanied using ansible (this repo). |
| 12 | +We no longer use ansible to update the infra, but manage it manually (AWS console, ssh to the machines, jenkins UI, artifactory UI). |
| 13 | + |
| 14 | +We are gradually moving away from using this infra |
| 15 | + - releases and integration builds are published on travis / appveyor |
| 16 | + - mergely tests for windows and on various jdks on github actions |
| 17 | + |
| 18 | +But we still need it because |
| 19 | + - where would we put PR / integration builds? |
| 20 | + - where would we get enough resources to run the community build? |
| 21 | + |
| 22 | +## SSH access |
| 23 | + |
| 24 | +<details> |
| 25 | + <summary>Add the following to your <code>~/.ssh/config</code></summary> |
| 26 | + |
| 27 | + ``` |
| 28 | + Host jenkins-master |
| 29 | + HostName 54.67.111.226 |
| 30 | + User admin |
| 31 | + |
| 32 | + Host jenkins-worker-behemoth-1 |
| 33 | + HostName 54.153.2.9 |
| 34 | + User admin |
| 35 | + |
| 36 | + Host jenkins-worker-behemoth-2 |
| 37 | + HostName 54.153.1.99 |
| 38 | + User admin |
| 39 | + |
| 40 | + Host jenkins-worker-behemoth-3 |
| 41 | + HostName 54.183.156.89 |
| 42 | + User admin |
| 43 | + |
| 44 | + # no public ip, jumphost through master |
| 45 | + Host influxdb |
| 46 | + HostName 172.31.0.100 |
| 47 | + User ubuntu |
| 48 | + ProxyCommand ssh -q -W %h:%p jenkins-master |
| 49 | + ``` |
| 50 | + |
| 51 | +</details> |
| 52 | + |
| 53 | + |
| 54 | + |
| 55 | +## Installed Services |
| 56 | + |
| 57 | +### nginx |
| 58 | + |
| 59 | +Nginx for `scala-ci.typesafe.com` on `jenkins-master`, `/etc/nginx/conf.d/jenkins.conf`. |
| 60 | + |
| 61 | +Handles jenkins, `/artifactory`, `/grafana`, `/benchq`, ... |
| 62 | + |
| 63 | +### Jenkins |
| 64 | + |
| 65 | +Auth goes via GitHub. |
| 66 | + |
| 67 | +TODO: how to get logs? |
| 68 | + - After a recent upgrade, scabot was no longer receiving job notifications from jenkins (it fixed itself...) |
| 69 | + - lrytz didn't figure out how to enable debug logs in jenkins |
| 70 | + - The notifications plugin [produces logs](https://github.com/jenkinsci/notification-plugin/blob/notification-1.17/src/main/java/com/tikal/hudson/plugins/notification/Phase.java#L386), but no idea how to enable / find them |
| 71 | + |
| 72 | +### Artifactory |
| 73 | + |
| 74 | +`scala-ci.typesafe.com/artifactory/` to log in to the UI. |
| 75 | + |
| 76 | +Repositories: |
| 77 | + - `scala-pr-validation-snapshots` |
| 78 | + - `scala-integration` for mergely builds |
| 79 | + - `dbuild` is an aggregate of cached remote repositories. used for the community build. |
| 80 | + |
| 81 | +The config file is `/opt/jfrog/artifactory/var/etc/system.yaml`. |
| 82 | + |
| 83 | +`/opt/jfrog/artifactory/var/log/console.log` has aggregated logs, logs for individual services in the same directory. |
| 84 | + |
| 85 | +`/opt/jfrog/artifactory/var/data/derby` is the main database for our artifactory; its large (19G in Aug 2024). |
| 86 | + |
| 87 | +The `access` service has its own db at `/opt/jfrog/artifactory/var/data/access/derby`. |
| 88 | + |
| 89 | +### Scabot |
| 90 | + |
| 91 | +[Scabot](https://github.com/scala/scabot) triggers Jenkins builds and updates their state on github commits / PRs. |
| 92 | + |
| 93 | +## Details |
| 94 | + |
| 95 | +### Unattended Upgrades |
| 96 | + |
| 97 | +Enabled on master and behemoths |
| 98 | + - default config on behemoths, installs all updates. |
| 99 | + - only security updates on master, plus jenkins. Not artifactory because an `apt upgrade` of it doesn't restart the service. Also, artifactory updates tend to be more breaking. |
| 100 | + |
| 101 | +### JVM installations |
| 102 | + |
| 103 | +Only a basic jre is installed through apt (eg `openjdk-17-jre-headless`). |
| 104 | + |
| 105 | +Use `sudo su` and cd to `/usr/lib/jvm`, see the `README` file. |
| 106 | +Install new JDKs here, we default to adoptium. |
| 107 | + |
| 108 | +### chrony |
| 109 | + |
| 110 | +On all machines (`chronyc tracking` to check): |
| 111 | + |
| 112 | +``` |
| 113 | +root@ip-172-31-10-237:~# cat /etc/chrony/sources.d/aws.sources |
| 114 | +#https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-ec2-ntp.html |
| 115 | +server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4 |
| 116 | +``` |
0 commit comments