Skip to content

Instantly share code, notes, and snippets.

@k-kinzal
Last active October 14, 2018 06:06
Show Gist options
  • Save k-kinzal/2d3d26190428af789d0169bd92a33fd9 to your computer and use it in GitHub Desktop.
Save k-kinzal/2d3d26190428af789d0169bd92a33fd9 to your computer and use it in GitHub Desktop.
variant on docker runner https://github.com/mumoshu/variant

[experimental] variant on docker runner

This is an experimental version to run variant on docker.

Difference from mumoshu/variant. https://github.com/cw-ozaki/variant/tree/0f2c812942c99ec3f32e44848d8bd3f91e8300ed

  • runner.dind options
    • If true, execute task with docker in docker
  • runner.variant options
    • If true, mount variant command and current directory, and working dir will be /variant.
  • runner.env options
  • runner.workdir options
  • fix version embedding

Get Started

$ curl -L https://gist.githubusercontent.com/k-kinzal/2d3d26190428af789d0169bd92a33fd9/raw/09ab7ee7814471ab4bc3873246769e86041ff8a4/setup.sh | sh
$ echo 'export VAR_HOME=$HOME/.variant' > ~/.zshrc
$ echo 'export VAR_VERSION=0f2c812942c99ec3f32e44848d8bd3f91e8300ed' > ~/.zshrc
$ echo 'export PATH=$HOME/.variant/bin:$PATH' > ~/.zshrc
$ variant help
time="2018-10-13T17:08:58Z" level=error msg="open .variantenv: no such file or directory"
time="2018-10-13T17:08:58Z" level=info msg="variant.definition.yaml does not exist"
Usage:
  variant [command]

Available Commands:
  env         Print currently selected environment
  help        Help about any command
  version     Print the version number of this command

Flags:
  -c, --config-file string   Path to config file
  -h, --help                 help for variant
      --logtostderr          write log messages to stderr
  -o, --output string        Output format. One of: json|text|bunyan (default "text")
  -v, --verbose              verbose output

Use "variant [command] --help" for more information about a command.
FROM alpine/git:1.0.4 as variant
ARG VARIANT_VERSION=0.10.0
WORKDIR /
RUN git clone https://github.com/cw-ozaki/variant.git \
&& cd /variant \
&& git checkout -b tag refs/tags/$VARIANT_VERSION || git checkout $(echo $VARIANT_VERSION | sed 's/+dirty$//') -b varind
FROM instrumentisto/dep:0.5.0 as dep
WORKDIR /go/src/github.com/mumoshu/variant
COPY --from=variant /variant /go/src/github.com/mumoshu/variant
RUN dep ensure
FROM golang:1.11.1-alpine as builder
ENV GOOS=linux
ENV GOARCH=amd64
WORKDIR /go/src/github.com/mumoshu/variant
COPY --from=dep /go/src/github.com/mumoshu/variant /go/src/github.com/mumoshu/variant
RUN apk add --no-cache bash make git ca-certificates && make build
FROM alpine:latest
ARG VARIANT_VERSION=0.10.0
ADD https://gist.githubusercontent.com/k-kinzal/2d3d26190428af789d0169bd92a33fd9/raw/dccf329d4389d5ad3176a0b8d2104ded4882e1e9/entrypoint.sh /entrypoint.sh
COPY --from=builder /go/src/github.com/mumoshu/variant/dist/$VARIANT_VERSION/var /usr/local/bin/var
COPY --from=builder /go/src/github.com/mumoshu/variant/dist/$VARIANT_VERSION/var /usr/local/bin/variant
RUN chmod +x /entrypoint.sh
VOLUME ["/variant", "/share"]
WORKDIR /variant
ENTRYPOINT ["/entrypoint.sh"]
CMD ["--help"]
#!/bin/sh
if [[ -d "/share" && ! -f "/share/variant" ]]; then
cp /usr/local/bin/variant /share/variant
cp /usr/local/bin/variant /share/var
fi
if [[ -n "$VAR_CWD" ]]; then
PWD=$VAR_CWD exec /usr/local/bin/variant "$@"
else
exec /usr/local/bin/variant "$@"
fi
#!/bin/sh
mkdir -p $HOME/.variant/bin
cat << 'EOS' > $HOME/.variant/bin/variant && chmod +x $HOME/.variant/bin/variant
#!/bin/sh
mkdir -p $VAR_HOME/${VAR_VERSION}
if [[ "$(docker images -q variant:$VAR_VERSION 2> /dev/null)" == "" ]]; then
docker build -t variant https://gist.githubusercontent.com/k-kinzal/2d3d26190428af789d0169bd92a33fd9/raw/f052f63885ed8f2ad8f6d59f09aae416c0c0f320/Dockerfile --build-arg VARIANT_VERSION=${VAR_VERSION} --squash
docker tag variant:latest variant:${VAR_VERSION}
fi
docker run --privileged \
--net host \
-e HOME=$HOME \
-e PWD=$PWD \
-e VAR_PATH=$VAR_HOME/$VAR_VERSION/variant \
-e VAR_CWD=$PWD \
-e DOCKER_PATH=$(which docker) \
-e DOCKER_HOST=unix:///var/run/docker.sock \
-v $PWD:/variant \
-v $VAR_HOME/$VAR_VERSION:/share:rw \
-v $(which docker):/usr/local/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
variant:$VAR_VERSION $@
EOS
cat << 'EOS'
You should make the following settings:
export VAR_HOME=$HOME/.variant
export VAR_VERSION=0f2c812942c99ec3f32e44848d8bd3f91e8300ed
export PATH=$HOME/.variant/bin:$PATH
If you want to change the version to be executed, change `VAR_VERSION`:
export VAR_VERSION=0.10.0
export VAR_VERSION=master
EOS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment