Use smaller admin image for CI

This commit is contained in:
Radon Rosborough 2020-12-31 23:29:47 -08:00
parent be8133ee71
commit e43b16bd12
7 changed files with 77 additions and 6 deletions

View File

@ -28,7 +28,7 @@ image:
@: $${I}
ifeq ($(I),composite)
node tools/build-composite-image.js
else ifeq ($(I),admin)
else ifneq (,$(filter $(I),admin ci))
docker build . -f docker/$(I)/Dockerfile -t riju:$(I)
else
docker build . -f docker/$(I)/Dockerfile -t riju:$(I) --label riju.image-hash=$(shell node tools/hash-dockerfile.js $(I))
@ -69,7 +69,7 @@ endif
.PHONY: shell
shell:
@: $${I}
ifeq ($(I),admin)
ifneq (,$(filter $(I),admin ci))
docker run -it --rm --hostname $(I) -v $(VOLUME_MOUNT):/src -v /var/run/docker.sock:/var/run/docker.sock -v $(HOME)/.aws:/var/riju/.aws -v $(HOME)/.docker:/var/riju/.docker -v $(HOME)/.ssh:/var/riju/.ssh -v $(HOME)/.terraform.d:/var/riju/.terraform.d -e AWS_REGION -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e DOCKER_USERNAME -e DOCKER_PASSWORD -e DEPLOY_SSH_PRIVATE_KEY -e DOCKER_REPO -e S3_BUCKET -e DOMAIN -e VOLUME_MOUNT=$(VOLUME_MOUNT) $(SHELL_PORTS) --network host riju:$(I) $(CMD)
else ifneq (,$(filter $(I),compile app))
docker run -it --rm --hostname $(I) $(SHELL_PORTS) riju:$(I) $(CMD)

View File

@ -4,6 +4,7 @@ COPY docker/admin/install.bash /tmp/
RUN /tmp/install.bash
WORKDIR /src
COPY docker/shared/my_init docker/admin/pid1.bash /usr/local/sbin/
COPY docker/shared/my_init /usr/local/sbin/
COPY docker/shared/admin-pid1.bash /usr/local/sbin/pid1.bash
ENTRYPOINT ["/usr/local/sbin/my_init", "/usr/local/sbin/pid1.bash"]
CMD ["bash"]

View File

@ -55,7 +55,7 @@ apt-get update
apt-get install -y $(sed 's/#.*//' <<< "${packages}")
wget https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -O awscli.zip
unzip awscli.zip
unzip -q awscli.zip
./aws/install
rm -rf aws awscli.zip

10
docker/ci/Dockerfile Normal file
View File

@ -0,0 +1,10 @@
FROM ubuntu:rolling
COPY docker/ci/install.bash /tmp/
RUN /tmp/install.bash
WORKDIR /src
COPY docker/shared/my_init /usr/local/sbin/
COPY docker/shared/admin-pid1.bash /usr/local/sbin/pid1.bash
ENTRYPOINT ["/usr/local/sbin/my_init", "/usr/local/sbin/pid1.bash"]
CMD ["bash"]

60
docker/ci/install.bash Executable file
View File

@ -0,0 +1,60 @@
#!/usr/bin/env bash
set -euxo pipefail
pushd /tmp
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y curl gnupg lsb-release
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
curl -fsSL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
ubuntu_ver="$(lsb_release -rs)"
ubuntu_name="$(lsb_release -cs)"
node_repo="$(curl -sS https://deb.nodesource.com/setup_current.x | grep NODEREPO= | grep -Eo 'node_[0-9]+\.x' | head -n1)"
tee -a /etc/apt/sources.list.d/custom.list >/dev/null <<EOF
deb [arch=amd64] https://deb.nodesource.com/${node_repo} ${ubuntu_name} main
deb [arch=amd64] https://dl.yarnpkg.com/debian/ stable main
deb [arch=amd64] https://download.docker.com/linux/ubuntu ${ubuntu_name} stable
EOF
packages="
docker-ce-cli
g++
git
jq
make
nodejs
skopeo
ssh
sudo
unzip
wget
yarn
"
apt-get update
apt-get install -y $(sed 's/#.*//' <<< "${packages}")
wget https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -O awscli.zip
unzip -q awscli.zip
./aws/install
rm -rf aws awscli.zip
rm -rf /var/lib/apt/lists/*
tee /etc/sudoers.d/90-riju >/dev/null <<"EOF"
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
EOF
popd
rm "$0"

View File

@ -2,7 +2,7 @@
set -euo pipefail
tee -a /etc/hosts >/dev/null <<< "127.0.0.1 admin"
tee -a /etc/hosts >/dev/null <<< "127.0.0.1 $(hostname)"
groupadd -g "$(stat -c %g "$PWD")" -o -p '!' -r riju
useradd -u "$(stat -c %u "$PWD")" -g "$(stat -c %g "$PWD")" -o -p '!' -m -N -l -s /usr/bin/bash -G sudo riju

View File

@ -11,4 +11,4 @@ set -euo pipefail
: ${DOMAIN}
: ${S3_BUCKET}
make image shell I=admin CMD="tools/ci-run.bash"
make image shell I=ci CMD="tools/ci-run.bash"