Skip to content

Instantly share code, notes, and snippets.

@soulchips
Last active July 21, 2022 16:47
Show Gist options
  • Save soulchips/106cd8aba6baca4c36d7aeb07ff163fd to your computer and use it in GitHub Desktop.
Save soulchips/106cd8aba6baca4c36d7aeb07ff163fd to your computer and use it in GitHub Desktop.
realitycheck with vm-jobs behind a proxy
version: 2
resource_job_defaults: &resource_job_defaults
docker:
- image: 'cimg/base:2021.02-20.04'
steps:
- run:
name: verify required Environment Variables
command: |
if [ -z "${CIRCLE_HOSTNAME}" -o -z "${CIRCLE_TOKEN}" ];then
echo "You must provide 2 Environment Variables in project settings for this job to run."
echo "CIRCLE_HOSTNAME: Should be the scheme://domain of your install. \"https://ci.example.com\""
echo "CIRCLE_TOKEN: Should be the API Key of an admin or project level with Scope:All"
exit 1
fi
- run:
name: verify that job ran with the requested resource_class option
command: |
curl -k \
"${CIRCLE_HOSTNAME%/}/api/v1.1/project/github/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/$CIRCLE_BUILD_NUM?\
circle-token=$CIRCLE_TOKEN" | \
jq '.picard.resource_class.class' | grep $CIRCLE_JOB
sleep 300
remote_docker_defaults: &remote_docker_defaults
docker: [{image: 'docker:17.06-git'}]
include_proxy_env: &include_proxy_env
name: "Set Proxy Env"
command: |
sudo mkdir /etc/systemd/system/docker.service.d
sudo bash -c 'echo [Service] > /etc/systemd/system/docker.service.d/http-proxy.conf'
sudo bash -c 'echo Environment="HTTP_PROXY=http://<your-proxy>:<proxy-port>/" >> /etc/systemd/system/docker.service.d/http-proxy.conf'
sudo bash -c 'echo Environment="HTTPS_PROXY=http://<your-proxy>:<proxy-port>/" >> /etc/systemd/system/docker.service.d/http-proxy.conf'
sudo systemctl daemon-reload
sudo systemctl restart docker
echo 'docker restarted'
basic_docker_build: &basic_docker_build
name: "Build a really basic docker image"
command: |
dockerfile=Dockerfile
echo "FROM alpine:latest" > $dockerfile
echo "RUN echo hello" >> $dockerfile
docker build -f $dockerfile --tag throwaway:$CIRCLE_BUILD_NUM .
docker run --rm throwaway:$CIRCLE_BUILD_NUM
contexts_defaults: &contexts_defaults
docker: [{image: 'alpine:latest'}]
working_directory: /a/contexts/test
workspaces_defaults: &workspaces_defaults
docker: [{image: 'circleci/node:latest'}]
working_directory: ~/foo/bar
jobs:
# resource class jobs
small: # 1 vCPU, 2GB RAM
<<: *resource_job_defaults
resource_class: small
medium: # 2 vCPUs, 4GB RAM
<<: *resource_job_defaults
resource_class: medium
medium+: # 3 vCPUs, 6GB RAM
<<: *resource_job_defaults
resource_class: medium+
large: # 4 vCPUs, 8GB RAM
<<: *resource_job_defaults
resource_class: large
xlarge: # 8 vCPUs, 16GB RAM
<<: *resource_job_defaults
resource_class: xlarge
# vm jobs
machine:
machine: true
steps:
- run:
<<: *include_proxy_env
- run:
<<: *basic_docker_build
- run: |
echo $SLEEP
date
sleep $SLEEP
date
echo 'Done sleeping.'
environment:
SLEEP: 1
remote_docker:
<<: *remote_docker_defaults
steps:
- run: which docker
- run: docker -v
- setup_remote_docker
- run:
<<: *include_proxy_env
- run:
<<: *basic_docker_build
- run: docker version
docker_layer_caching:
<<: *remote_docker_defaults
steps:
- run: which docker
- run: docker -v
- setup_remote_docker:
docker_layer_caching: true
- run:
<<: *include_proxy_env
- run:
<<: *basic_docker_build
- run: docker version
machine_dlc:
machine:
docker_layer_caching: true
steps:
- run: which docker
- run: docker -v
- run:
<<: *include_proxy_env
- run:
<<: *basic_docker_build
- run: docker version
# feature jobs
contexts:
<<: *contexts_defaults
steps:
- run: env | grep CONTEXT_END_TO_END_TEST_VAR
multi-contexts:
<<: *contexts_defaults
steps:
- run: env | grep MULTI_CONTEXT_END_TO_END_VAR
write_workspace:
<<: *workspaces_defaults
steps:
- run: mkdir stuff
- run: echo 5 >./stuff/thing
- persist_to_workspace:
root: .
paths:
- stuff
read_workspace:
<<: *workspaces_defaults
steps:
- attach_workspace:
at: ./attached
- run: |
if [[ $(< ./attached/stuff/thing) != '5' ]]; then
echo 'Sadness, the value is not what we expected, so the workspace write/read did not work'
exit 1
else
echo 'Yay, value matches'
exit 0
fi
save_and_restore_cache:
docker:
- image: circleci/python
working_directory: ~/realitycheck
steps:
- checkout
- run: mkdir -p stuff
- run: echo 5 >./stuff/thing
- save_cache:
key: v3-file-cache-{{ .BuildNum }}
paths:
- ./stuff/thing
- run: rm -rf ./stuff/thing
- run: sleep 5
- restore_cache:
keys:
- v3-file-cache-{{ .BuildNum }}
- run: |
if [[ $(< stuff/thing) != '5' ]]; then
exit 1
else
echo "The cache was populated"
fi
artifacts_test_results:
docker:
- image: python:3.6.0
working_directory: ~/realitycheck
steps:
- checkout
- run:
name: Creating Dummy Artifacts
command: |
echo "my artifact file" > /tmp/artifact-1.txt;
mkdir /tmp/artifacts;
echo "my artifact files in a dir" > /tmp/artifacts/artifact-2.txt;
- store_artifacts:
path: /tmp/artifact-1.txt
destination: artifact-file.txt
- store_artifacts:
path: /tmp/artifacts
- store_test_results:
path: test-results
workflows:
version: 2
resource_class_jobs:
jobs:
- small
- medium
- medium+
- large
- xlarge
vm_jobs:
jobs:
- machine
- remote_docker
- docker_layer_caching
- machine_dlc
feature_jobs:
jobs:
- save_and_restore_cache
- contexts:
context: org-global
- multi-contexts:
context: individual-local
- write_workspace
- read_workspace:
requires:
- write_workspace
- artifacts_test_results
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment