Как заставить docker -компоноваться работать в docker сгенерированном конвейере jenkins на windows? - PullRequest
0 голосов
/ 31 января 2020

Я запускаю этот код, чтобы запустить докеризованный Дженкинс. Это работает.

docker run -p 81:8080 -p 50000:50000 --name myjenkins --privileged -v %cd%/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins

У меня есть успешная проверка scm с использованием bitbucket, webhooks и подключение к моему локальному jenkins через брандмауэр каждый раз, когда я пу sh. Предыдущий пример Jenkinsfile работает:

pipeline {
  agent any

  stages {
    stage('Build') {
      steps {
        echo 'Building...'
      }
    }
  }
}

Затем я добавил в свой Jenkinsfile

pipeline {
  agent any
  stages {
      stage('Test') {
        steps {
          echo 'Testing...'
        }
      }
      stage('docker-compose') {
          steps {
             sh "./dockcompose.sh"
          }
      }
  }
  post {
     always {
        sh "./dockcompose-down.sh"
     }
  }
}

У меня есть локальный файл docker -compose.yml, который я тщательно протестировал локально и работает , В сообщении об ошибке я получаю:

docker-compose: not found

Любые предложения, почему он не может найти docker -compose и как заставить его распознавать метод? спасибо

Ответы [ 2 ]

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

Вы должны установить docker-compose внутри контейнера, поскольку образ jenkins/jenkins не поставляется с docker-compose. Я бы предложил расширить исходное изображение, создав собственный Dockerfile. Например, внутри любого каталога создайте следующий файл с именем Dockerfile:

FROM jenkins/jenkins

USER root

# see https://docs.docker.com/compose/install/
RUN curl -L \
  "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" \
  -o /usr/local/bin/docker-compose \
  && chmod +x /usr/local/bin/docker-compose

USER jenkins

Теперь внутри этого каталога создайте новый образ, назовем его myjenkins:

docker build -t myjenkins .
Sending build context to Docker daemon  4.096kB
Step 1/4 : FROM jenkins/jenkins
 ---> 57f9f0b056cc
Step 2/4 : USER root
 ---> Using cache
 ---> f6dfbc759063
Step 3/4 : RUN curl -L   "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)"   -o /usr/local/bin/docker-compose   && chmod +x /usr/local/bin/docker-compose
 ---> Running in 36c8c22c01fb
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0   1944      0 --:--:-- --:--:-- --:--:--  1946
100 16.4M  100 16.4M    0     0  2404k      0  0:00:06  0:00:06 --:--:-- 3423k
Removing intermediate container 36c8c22c01fb
 ---> ca119efd5ea6
Step 4/4 : USER jenkins
 ---> Running in 5d1149b328b5
Removing intermediate container 5d1149b328b5
 ---> 841b3adbfe94
Successfully built 841b3adbfe94
Successfully tagged myjenkins:latest

Вы можете перечислить его с помощью docker image ls:

docker image ls
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
myjenkins                  latest              841b3adbfe94        10 minutes ago      585MB
...

Теперь запустите свой контейнер. Используя вашу команду, вам нужно только заменить имя образа jenkins/jenkins в конце вашей команды на myjenkins (обратите внимание, что для проверки на моей ма c P C я удалил bind-mount из /var/jenkins_home, но Вы должны быть в состоянии сохранить это). Кроме того, при необходимости удалите ранее запущенный контейнер:

docker run --rm -p 81:8080 -p 50000:50000 --name myjenkins  -v /var/run/docker.sock:/var/run/docker.sock myjenkins

Введите свой контейнер и проверьте, установлено ли docker-compose:

docker exec -it myjenkins bash
jenkins@43b74c8f602b:/$ docker-compose --version
docker-compose version 1.25.3, build d4d1b42b
jenkins@43b74c8f602b:/$ 
0 голосов
/ 31 января 2020

очевидно docker -композитный исполняемый файл отсутствует в переменной окружения PATH пользователя, под которым запускается Jenkins.

Однако лучшее решение - не использовать docker compose, а простую docker build или плагин kubernetes

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