This is a custom Gradle build cache implementation which uses AWS S3 to store the cache objects.
- Version >= 0.3.0 - Gradle 4.x
- Version < 0.3.0 - Gradle 3.5
Please note that this plugin is not yet ready for production. Feedback though is very welcome. Please open an issue if you find a bug or have an idea for an improvement.
The Gradle build cache needs to be configured on the Settings level. As a first step, add a
dependency to the plugin to your settings.gradle
file. Get the latest version from Gradle plugin portal.
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.ch.myniva.gradle:s3-build-cache:<version>"
}
}
The AWS S3 build cache implementation has a few configuration options:
Configuration Key | Description | Mandatory | Default Value |
---|---|---|---|
region |
The AWS region the S3 bucket is located in. | yes | |
bucket |
The name of the AWS S3 bucket where cache objects should be stored. | yes | |
path |
The path under which all cache objects should be stored. | no | |
reducedRedundancy |
Whether or not to use reduced redundancy. | no | true |
endpoint |
Alternative S3 compatible endpoint | no | |
headers |
A map with HTTP headers to be added to each request (nulls are ignored). e.g. [ 'x-header-name': 'header-value' ] |
no | |
awsAccessKeyId |
The AWS access key id | no | from DefaultAWSCredentialsProviderChain |
awsSecretKey |
The AWS secret key | no | from DefaultAWSCredentialsProviderChain |
sessionToken |
The AWS sessionToken when you use temporal credentials | no | from DefaultAWSCredentialsProviderChain |
The buildCache
configuration block might look like this:
apply plugin: 'ch.myniva.s3-build-cache'
ext.isCiServer = System.getenv().containsKey("CI")
buildCache {
local {
enabled = !isCiServer
}
remote(ch.myniva.gradle.caching.s3.AwsS3BuildCache) {
region = 'eu-west-1'
bucket = 'your-bucket'
push = isCiServer
}
}
More details about configuring the Gradle build cache can be found in the official Gradle documentation.
The plugin uses the DefaultAWSCredentialsProviderChain
to look up the AWS credentials.
If you want to override the credentials feel free to set awsAccessKeyId
and awsSecretKey
and (optionally depends on
configuration) sessionToken
. If they are set the plugin will ignore DefaultAWSCredentialsProviderChain
.
The AWS credential must have at least the following permissions to the bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket/*",
"arn:aws:s3:::your-bucket"
]
}
]
}
This plugin does not deal with expiring cache entries directly but relies on S3 object lifecycle management to do so. Cache entry expiration rules can be set on S3 buckets using AWS API or via AWS Management Console.
Contributions are always welcome! If you'd like to contribute (and we hope you do) please open a pull request.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.