Как установить дополнительное программное обеспечение для агента Teamcity? - PullRequest
0 голосов
/ 31 марта 2020

У меня установлен агент teamcity через docker image

Как добавить программное обеспечение для этого агента через brew?

1 Ответ

1 голос
/ 02 апреля 2020

Dockerized Teamcity агентам, скорее всего, потребуется расширить базовый образ c и использовать соответствующие пакеты управления.

Например, мы используем teamcity-minimal-agent образ на основе ОС Ubuntu.

Ниже приведен пример расширенного Dockerfile, который содержит инструкции по установке некоторых базовых c инструментов и дополнительных пакетов, необходимых нашему программному обеспечению, а также docker клиента для запуска "docker в docker" .

Кроме того, он выполняет шаги для синхронизации c идентификатора пользователя ОС и buildagent идентификатора пользователя, используемого для запуска агента.

# 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 -составить намного легче бежать. Найдите пример ниже. Он позволяет запускать контейнер docker в агентском docker контейнере, известном как "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

Эти примеры также могут быть значительно упрощены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...