aboutsummaryrefslogtreecommitdiffstats
path: root/it
diff options
context:
space:
mode:
authorWouter Admiraal <wouter.admiraal@sonarsource.com>2020-03-04 10:53:12 +0100
committerWouter Admiraal <45544358+wouter-admiraal-sonarsource@users.noreply.github.com>2020-03-05 11:53:22 +0100
commitae038e155d03502e1dcd154408f29a057f089456 (patch)
tree41d2282274a704e28ad96dbe937fbdfbbd333e16 /it
parent6da9b4b0c066d1e524a27aebc74cfd8d1b8ab19a (diff)
downloadsonar-scanner-cli-ae038e155d03502e1dcd154408f29a057f089456.tar.gz
sonar-scanner-cli-ae038e155d03502e1dcd154408f29a057f089456.zip
BUILD-759 Move Jenkins + Travis QA to Cirrus CI
Diffstat (limited to 'it')
-rw-r--r--it/docker/Dockerfile21
-rw-r--r--it/packer/README.md23
-rw-r--r--it/packer/setup.ps160
-rw-r--r--it/packer/sonar-scanner-cli-qa.json29
-rw-r--r--it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java5
5 files changed, 137 insertions, 1 deletions
diff --git a/it/docker/Dockerfile b/it/docker/Dockerfile
new file mode 100644
index 0000000..78df5f3
--- /dev/null
+++ b/it/docker/Dockerfile
@@ -0,0 +1,21 @@
+#------------------------------------------------------------------------------
+# Installs NodeJS, which is needed for running the Linux ITs.
+#
+# Build from the basedir:
+# docker build -f it/docker/Dockerfile-qa -t sonar-scanner-cli-qa it/docker
+#
+# Verify the content of the image by running a shell session in it:
+# docker run -it sonar-scanner-cli-qa bash
+#
+# CirrusCI builds the image when needed. No need to manually upload it to
+# Google Cloud Container Registry. See section "gke_container" of .cirrus.yml
+#------------------------------------------------------------------------------
+
+FROM gcr.io/ci-cd-215716/base:latest
+
+USER root
+
+RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
+RUN apt-get install -y nodejs
+
+USER sonarsource
diff --git a/it/packer/README.md b/it/packer/README.md
new file mode 100644
index 0000000..57dcf88
--- /dev/null
+++ b/it/packer/README.md
@@ -0,0 +1,23 @@
+Custom Windows VM image for sonar-scanner-cli Windows ITs
+=========================================================
+
+This defines a custom Windows image necessary for the ITs. It contains all [build tools helpers](https://github.com/SonarSource/buildTools/blob/docker/bin/), as well as Node JS, which is needed to scan the example projects.
+
+How to build this VM image
+--------------------------
+
+*This isn't supposed to be built by hand.* We have a special image on our Google Cloud project, called *packer-builder-v1*. This image gets started up by Cirrus CI in the `create_win_vm_task` (see [`../../.cirrus.yml`](../../.cirrus.yml)), and will use [Packer](https://packer.io/) to create our custom VM image. The Packer instructions are contained in the `sonar-scanner-cli-qa.json` file.
+
+Note that this image is rebuilt by Cirrus CI every time the `sonar-scanner-cli-qa.json` or `setup.ps1` files change (see the `create_win_vm_task`'s `skip` instruction in [`../../.cirrus.yml`](../../.cirrus.yml)). If no changes are detected, the build will be skipped, and the previously existing image will be used.
+
+How to debug this VM image
+--------------------------
+
+1. Log on to [Google Cloud](http://console.cloud.google.com/)
+2. Go to our SonarQube project (ci-cd-215716)
+3. Under *Compute Engine > Images*, you should see *packer-builder-v1*. Start a new VM with this image.
+ This image is pre-configured for using Packer, as well as pushing new VM images to our SonarQube project.
+4. Once started, SSH into this VM (you can do this directly via the browser).
+5. `sudo su` to use the root user (which is configured to use the GCE service account).
+ You can now add packer JSON files, and run the `packer build` command to test your new images. **Make sure you remove any test images from GCE.**
+
diff --git a/it/packer/setup.ps1 b/it/packer/setup.ps1
new file mode 100644
index 0000000..bfaca02
--- /dev/null
+++ b/it/packer/setup.ps1
@@ -0,0 +1,60 @@
+$ErrorActionPreference = 'Stop'
+
+function Install-Chocolatey {
+ # Run the installer.
+ Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+}
+
+function Install-NodeJs {
+ choco install -y nodejs
+}
+
+function Install-Buildtools {
+ $path = "${env:Temp}\buildTools.zip"
+
+ # Fetch the build tools archive.
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ (New-Object System.Net.WebClient).DownloadFile('https://github.com/SonarSource/buildTools/archive/docker.zip', $path)
+
+ # Extract the archive to the C drive.
+ Add-Type -AssemblyName System.IO.Compression.FileSystem
+ [System.IO.Compression.ZipFile]::ExtractToDirectory($path, 'C:\')
+
+ # Update global PATH.
+ $currentPath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path
+ $updatedPath = $currentPath+';C:\buildTools-docker\bin'
+ Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $updatedPath
+
+ # Remove archive.
+ del $path
+}
+
+function Install-Maven {
+ choco install -y openjdk11 --version 11.0.4.11
+ choco install -y maven --version 3.6.2
+}
+
+function Install-Git {
+ # We use Git to enable Unix Tools. This will allow us to use Bash-style
+ # commands in .cirrus.yml, like "source".
+ choco install -y git --version 2.23.0 --package-parameters "/GitAndUnixToolsOnPath"
+}
+
+Write-Host "Install chocolatey"
+Install-Chocolatey
+
+Write-Host "Install Maven"
+Install-Maven
+
+Write-Host "Install NodeJs"
+Install-NodeJs
+
+Write-Host "Install Unix Tools"
+Install-Git
+
+Write-Host "Set up build tools"
+Install-Buildtools
+
+# Disable antivirus analysis on C drive.
+Write-Host "Finalize VM configuration"
+Set-MpPreference -ScanAvgCPULoadFactor 5 -ExclusionPath "C:\"
diff --git a/it/packer/sonar-scanner-cli-qa.json b/it/packer/sonar-scanner-cli-qa.json
new file mode 100644
index 0000000..8ab3e86
--- /dev/null
+++ b/it/packer/sonar-scanner-cli-qa.json
@@ -0,0 +1,29 @@
+{
+ "builders": [
+ {
+ "type": "googlecompute",
+ "project_id": "ci-cd-215716",
+ "source_image": "windows-server-1809-dc-core-v20200211",
+ "image_name": "sonar-scanner-cli-qa",
+ "disk_size": "50",
+ "machine_type": "n1-standard-1",
+ "communicator": "winrm",
+ "winrm_username": "packer_user",
+ "winrm_insecure": true,
+ "winrm_use_ssl": true,
+ "metadata": {
+ "windows-startup-script-cmd": "winrm quickconfig -quiet & net user /add packer_user & net localgroup administrators packer_user /add & winrm set winrm/config/service/auth @{Basic=\"true\"}"
+ },
+ "zone": "us-central1-a",
+ "tags": ["packer"]
+ }
+ ],
+ "provisioners": [
+ {
+ "type": "powershell",
+ "scripts": [
+ "{{template_dir}}/setup.ps1"
+ ]
+ }
+ ]
+}
diff --git a/it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java b/it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java
index 086cba9..f03e757 100644
--- a/it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java
+++ b/it/src/test/java/com/sonarsource/scanner/it/ScannerTestCase.java
@@ -68,13 +68,16 @@ public abstract class ScannerTestCase {
if (StringUtils.isNotBlank(scannerVersion)) {
LOG.info("Use provided Scanner version: " + scannerVersion);
artifactVersion = Version.create(scannerVersion);
+ } else if (StringUtils.isNotBlank(System.getenv("PROJECT_VERSION"))) {
+ scannerVersion = System.getenv("PROJECT_VERSION");
+ LOG.info("Use Scanner version from environment: " + scannerVersion);
+ artifactVersion = Version.create(scannerVersion);
} else {
try (FileInputStream fis = new FileInputStream(
new File("../target/maven-archiver/pom.properties"))) {
Properties props = new Properties();
props.load(fis);
artifactVersion = Version.create(props.getProperty("version"));
- return artifactVersion;
} catch (IOException e) {
throw new IllegalStateException(e);
}