मेरे पास डोकर छवि के माध्यम से टीमसिटी एजेंट स्थापित है

मैं इस एजेंट में काढ़ा के माध्यम से कुछ सॉफ्टवेयर कैसे जोड़ सकता हूं?

0
Alex Klimashevsky 31 मार्च 2020, 15:42

1 उत्तर

सबसे बढ़िया उत्तर

Dockerized Teamcity एजेंटों को, संभवतः, मूल छवि का विस्तार करने और उपयुक्त पैकेज प्रबंधन का उपयोग करने की आवश्यकता होगी।

उदाहरण के लिए, हम उबंटू ओएस पर आधारित teamcity-minimal-agent इमेज का उपयोग करते हैं।

नीचे विस्तारित Dockerfile का एक उदाहरण दिया गया है जिसमें कुछ बुनियादी उपकरणों के इंस्टॉलेशन निर्देश और हमारे सॉफ़्टवेयर को अतिरिक्त पैकेज के साथ-साथ "डॉकर इन डॉकर" चलाने के लिए डॉकर क्लाइंट भी शामिल है।

इसके अलावा, यह एक OS यूजर आईडी और 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-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

इन उदाहरणों को बहुत सरल भी किया जा सकता है।

2
antonbormotov 2 अप्रैल 2020, 10:20