如何安装额外的软件到TeamCity代理?

3

我已经通过docker镜像安装了TeamCity代理。

如何通过brew向此代理添加一些软件?

1个回答

6

使用Docker化的TeamCity代理,很可能需要扩展基本镜像并使用适当的软件包管理器。

例如,我们使用基于Ubuntu操作系统的teamcity-minimal-agent镜像。

以下是一个扩展了的Dockerfile示例,其中包含一些基本工具和额外软件包的安装说明,这些软件包是我们的软件所需的,以及docker客户端以运行“docker in docker”。

此外,它运行步骤来同步操作系统用户ID和用于运行代理的buildagent用户ID。

# 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让运行变得更加容易。 以下是一个示例。 它允许在代理docker容器中运行docker容器,也称为“嵌套式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

这些示例也可以大大简化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接