Запустите ansible - playbook в контейнере Jenkins - PullRequest
0 голосов
/ 22 февраля 2020

Вопрос: Можно ли иметь docker -композитный файл для запуска ansible -playbook в контейнере Jenkins?

Резюме: У меня есть контейнер Jenkins (containerA), который я хотел бы запустить ansible -playbook. Однако, поскольку контейнеры останавливаются после выполнения, я не знаю, как определить неработающий контейнер в docker -compose.

Я опубликовал вывод для docker ps -a, docker-compose и Dockerfile для ansible-playbook

Пожалуйста, дайте мне знать, если мой вопрос неясен. PG

root@jenkins1:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                                                                   NAMES
c47a4ee06d71        jenkins/jenkins     "/sbin/tini -- /usr/…"   2 months ago        Up 2 months               0.0.0.0:50000->50000/tcp, 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp   jenkins1
956309ae7370        foo/ansible       "ansible-playbook"       2 months ago        Exited (2) 2 months ago                                                                           hopeful_hypatia

cat /opt/docker_jenkins/docker-compose.yml
version: '3.2'
services:
  jenkins:
    restart: always
    image: 'jenkins/jenkins'
    container_name: jenkins1
    ports:
      - '80:8080'
      - '443:8443'
      - '50000:50000'
    volumes:
      - type: volume
        source: jenkins_home
        target: /var/jenkins_home
        volume:
          nocopy: true
      - type: bind
        source: /var/lib/bin
        target: /root/.local/bin

volumes:
  jenkins_home:
FROM alpine:3.7

ENV ANSIBLE_VERSION 2.8.6

ENV BUILD_PACKAGES \
  bash \
  curl \
  tar \
  openssh-client \
  sshpass \
  git \
  python \
  py-boto \
  py-dateutil \
  py-httplib2 \
  py-jinja2 \
  py-paramiko \
  py-pip \
  py-yaml \
  ca-certificates

# If installing ansible@testing
#RUN \
#   echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> #/etc/apk/repositories

RUN set -x && \
    \
    echo "==> Adding build-dependencies..."  && \
    apk --update add --virtual build-dependencies \
      gcc \
      musl-dev \
      libffi-dev \
      openssl-dev \
      python-dev && \
    \
    echo "==> Upgrading apk and system..."  && \
    apk update && apk upgrade && \
    \
    echo "==> Adding Python runtime..."  && \
    apk add --no-cache ${BUILD_PACKAGES} && \
    pip install --upgrade pip && \
    pip install python-keyczar docker-py && \
    \
    echo "==> Installing Ansible..."  && \
    pip install ansible==${ANSIBLE_VERSION} && \
    \
    echo "==> Cleaning up..."  && \
    apk del build-dependencies && \
    rm -rf /var/cache/apk/* && \
    \
    echo "==> Adding hosts for convenience..."  && \
    mkdir -p /etc/ansible /ansible && \
    echo "[local]" >> /etc/ansible/hosts && \
    echo "localhost" >> /etc/ansible/hosts

ENV ANSIBLE_GATHERING smart
ENV ANSIBLE_HOST_KEY_CHECKING false
ENV ANSIBLE_RETRY_FILES_ENABLED false
ENV ANSIBLE_ROLES_PATH /ansible/playbooks/roles
ENV ANSIBLE_SSH_PIPELINING True
ENV PYTHONPATH /ansible/lib
ENV PATH /ansible/bin:$PATH
ENV ANSIBLE_LIBRARY /ansible/library

WORKDIR /ansible/playbooks

ENTRYPOINT ["ansible-playbook"]

1 Ответ

0 голосов
/ 22 февраля 2020

контейнер docker будет активен, только если есть какой-либо процесс или служба, которая удерживает этот контейнер для запуска.

В вашем файле docker, который вы выполняете, команда ansible-playbook выдаст ошибку ERROR! You must specify a playbook file to run вместе с опциями справки.

Если вы хотите выполнить ansible playbook, у вас есть передать больше аргументов

Успешное выполнение playbook происходит как.

ansible-playbook -i <inventory_file> <playbook_name> 
...