Skip to content

Instantly share code, notes, and snippets.

@flurdy
Created May 19, 2020 23:45
Show Gist options
  • Save flurdy/1c208e3ca1d032238ce7b337f14e7eb1 to your computer and use it in GitHub Desktop.
Save flurdy/1c208e3ca1d032238ce7b337f14e7eb1 to your computer and use it in GitHub Desktop.
CircleCI SBT build upload to GCR
version: 2.1
orbs:
gcp-gcr: circleci/gcp-gcr@0.6.1
### Requires ENV VARS:
### IMAGE_NAME (E.g. github.com/myusername/myproject)
### IMAGE_BASE_VERSION (E.g. 1.0)
### GOOGLE_CLOUD_KEYS
### GOOGLE_PROJECT_ID
### GOOGLE_COMPUTE_ZONE
jobs:
build:
docker:
- image: flurdy/sbt:1.3.3-alpine
environment:
JAVA_OPTS: -Xmx4096m -Xss256m
SBT_VERSION: 1.3.3
TERM: dumb
working_directory: ~/repo
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "build.sbt" }}
- v1-dependencies-
- run:
name: Compile
command: cat /dev/null | sbt test:compile
- run:
name: Test
command: cat /dev/null | sbt test:test
- run:
name: Package application
command: cat /dev/null | sbt stage
- run:
name: Zipping application
command: |
cat /dev/null | sbt dist
mkdir -p /tmp/artifacts
cp target/universal/*.zip /tmp/artifacts/
- save_cache:
paths:
- ~/.m2
- ~/.ivy2/cache
- ~/.sbt
key: v1-dependencies-{{ checksum "build.sbt" }}
- store_artifacts:
path: /tmp/artifacts
- store_test_results:
path: target/test-reports
- persist_to_workspace:
root: ./
paths:
- target/universal/stage
build-image:
docker:
- image: circleci/buildpack-deps:stretch
steps:
- checkout
- attach_workspace:
at: ./
- setup_remote_docker
- run:
name: Build Docker image
command: docker build -t $IMAGE_NAME:latest .
- run:
name: Archive Docker image
command: docker save -o image.tar $IMAGE_NAME
- persist_to_workspace:
root: .
paths:
- ./image.tar
publish-image:
docker:
- image: circleci/buildpack-deps:stretch
steps:
- setup_remote_docker
- attach_workspace:
at: ./
- run:
name: Load archived Docker image
command: docker load -i image.tar
- run:
name: Tagging
command: |
docker tag $IMAGE_NAME:latest gcr.io/$GOOGLE_PROJECT_ID/$IMAGE_NAME:latest
docker tag $IMAGE_NAME:latest $IMAGE_NAME:$IMAGE_BASE_VERSION.$CIRCLE_BUILD_NUM
docker tag $IMAGE_NAME:latest gcr.io/$GOOGLE_PROJECT_ID/$IMAGE_NAME:$IMAGE_BASE_VERSION.$CIRCLE_BUILD_NUM
- gcp-gcr/gcr-auth:
gcloud-service-key: GOOGLE_CLOUD_KEYS
google-project-id: GOOGLE_PROJECT_ID
google-compute-zone: GOOGLE_COMPUTE_ZONE
- gcp-gcr/push-image:
google-project-id: GOOGLE_PROJECT_ID
image: $IMAGE_NAME
- gcp-gcr/tag-image:
google-project-id: GOOGLE_PROJECT_ID
image: $IMAGE_NAME
source-tag: latest
target-tag: $IMAGE_BASE_VERSION.$CIRCLE_BUILD_NUM
workflows:
version: 2
build-master:
jobs:
- build:
filters:
branches:
only: master
- build-image:
requires:
- build
filters:
branches:
only: master
- publish-image:
requires:
- build-image
context: google-cloud-registry
filters:
branches:
only: master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment