teamcity - 如何为 teamcity 代理安装附加软件?
问题描述
我通过 docker image 安装了 teamcity 代理
如何通过 brew 向该代理添加一些软件?
解决方案
Dockerized Teamcity 代理很可能需要扩展基本映像并使用适当的包管理。
例如,我们使用teamcity-minimal-agent
基于 Ubuntu 操作系统的镜像。
下面是一个扩展示例,Dockerfile
其中包含一些基本工具的安装说明和我们的软件需要的额外软件包以及运行“docker in docker”的 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 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
这些例子也可以大大简化。
推荐阅读
- python - How to indicate to a specific version of database? [Django] [PostgreSQL]
- json - 输入'列表
' 不是类型 'Map 的子类型 ' 在类型转换中 - validation - 资源服务器的 OAuth2.0 访问令牌验证
- shell - 如何在 GNU Make 中修改 PATH 并成功使用 $(shell ...) 执行命令?
- javascript - 将对象数组中的值转换为它们自己的键值对对象并插入到新数组中
- java - Postgis,使用 Java 更新几何列
- c++ - gmock 基类构造函数实例化与另一个实例
- python - 如何从 Django 的 UserCreationForm 中的用户名字段禁用自动对焦?
- c++ - 矢量搜索押韵词
- python - 从列表中查找唯一索引