I have teamcity agent installed via docker image
How can I add some software to this agent via brew?
I have teamcity agent installed via docker image
How can I add some software to this agent via brew?
Dockerized Teamcity agents, most probably, would require to extend basic image and use appropriate package manages.
For instance, we use teamcity-minimal-agent
image, based on Ubuntu OS.
Below is an example of extended Dockerfile
that contains installation instructions of some basic tools and extra packages our software needs as well as docker client to run "docker in docker".
In addition, it runs steps to sync an OS user id and buildagent
user id, used to run an agent.
# Custom Dockerfile
FROM jetbrains/teamcity-minimal-agent:2019.2
ARG user_id
ARG docker_group_id
ENV USER_ID=${user_id}
# Set correct environment variables.
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND noninteractive
# Install basic tools
RUN apt-get update && \
apt-get -y --no-install-recommends install \
dirmngr \
gpg-agent \
software-properties-common \
apt-transport-https \
wget \
zip \
git
# Add key and docker repository
ENV DOCKER_VERSION 18.03.1~ce~3-0~ubuntu
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
RUN echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
# Install necessary software
RUN apt-get update
RUN apt-get -y --no-install-recommends install \
docker-ce=${DOCKER_VERSION} \
rsync openssh-client vim python python-dev \
bzip2 nodejs dnsutils sudo
# Install pip and packages
RUN curl -sS 'https://bootstrap.pypa.io/get-pip.py' | python
RUN pip install \
pep8 \
requests
# Access and signature for github repositories
COPY <my-gpg-file>.gpg /var/tmp/<my-gpg-file>.gpg
# Pass OS user's id and export it to use in subcontainers
RUN groupmod -g ${USER_ID} buildagent && \
usermod -g ${USER_ID} -G docker buildagent
# Sync docker group id between OS and container
RUN groupmod -g ${docker_group_id} docker
USER buildagent
RUN gpg --allow-secret-key-import --import /var/tmp/<my-gpg-file>.gpg
RUN git config --global user.email "admin@example.com" && \
git config --global user.name "Teamcity Bot" && \
git config --global user.signingkey <my-gpg-key>
USER root
Docker-compose makes it much easer to run. Find an example below. It allows to run a docker container in the agent docker container, known as "docker in docker".
# Docker-compose to run containers
#
# Build images: DOCKER_GROUP_ID=$(getent group docker | cut -d: -f3) USER_ID=$(id -u) docker-compose build
# Start containers: docker-compose up -d
#
version: '2.2'
services:
teamcity-server:
hostname: "teamcity-server"
container_name: "teamcity-server"
build: "."
volumes:
- "/data/teamcity:/data/teamcity:rw"
environment:
TEAMCITY_SERVER_MEM_OPTS: -Xmx1g -XX:ReservedCodeCacheSize=350m
TEAMCITY_LOGS: /opt/teamcity/logs
TEAMCITY_DIST: /opt/teamcity
TEAMCITY_DATA_PATH: /opt/teamcity/data
ports:
- "443:443"
- "80:80"
restart: "always"
teamcity-agent:
hostname: "teamcity-agent-01"
container_name: "teamcity-agent-01"
build:
context: "./teamcity-agent"
args:
user_id: "${USER_ID}"
docker_group_id: "${DOCKER_GROUP_ID}"
image: "teamcity-agent"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "/var/lib/docker:/var/lib/docker"
- "/opt/share/.composer:/home/buildagent/.composer:rw"
- "/opt/agents:/opt/agents:rw"
environment:
- "SERVER_URL=https://<teamcity-url>"
- "AWS_DEFAULT_REGION=ap-southeast-1"
- "AGENT_NAME=teamcity-agent-01"
- "RUN_AS_BUILDAGENT=true"
privileged: true
restart: "always"
cpus: 1
mem_limit: 1g
These examples can be much simplified too.