@mxelgin

Как хост узнает место сборки jenkins?

Требуется автоматизировать процесс сборки приложения. Имеются исходники на Git ресурсе. Необходимо собрать из них проект и положить в Docker контейнер. Никаких средств оркестрации на этом хосте нет и не будет. На хосте установлен только докер. Все приложения должны крутиться в контейнерах. Соответственно Jenkins тоже должен жит в контейнере.

Решил автоматизировать сборку. Пошел в сторону Jenkins in Docker. Почитал скупую информацию, обронил слезу и начал мучать ИИ. Что получилось.
Избыточный docker-compose.yml так как по документации указано что есть 2 способа работы Jenkins через Docker. На официальном сайте используем sshagent . На официальном ресурсе github используем Jenkins через dind. Интересные подход к документации разработчиков, подумал и решил пробовать сразу 2я способами.
services:
  jenkins:
    image: jenkins/jenkins:lts
    privileged: true  # Запуск с правами привилегированного контейнера
    ports:
      - "7070:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
    environment:
      - DOCKER_HOST=tcp://docker:2376
      - DOCKER_TLS_CERTDIR=/certs
    networks:
      jenkins:    # Правильное определение сети
        aliases:
          - docker  # Установка псевдонима для сети


  docker-dind:
    image: docker:24.0.7-dind
    privileged: true  # Привилегированный доступ для DinD
    volumes:
      - jenkins_home:/var/jenkins_home   # Общий том с Jenkins для доступа к файлам
    networks:
      - jenkins
    entrypoint: ["dockerd-entrypoint.sh"]  # Установите точку входа
    command: ["--storage-driver=overlay2"]  # Передайте параметры в Docker Daemon
    ports:
      - "2376:2376"
      
networks:
  jenkins:   
  
volumes:
  jenkins_home:


Несколько часов попробовав завести Jenkins через dind плюнул и ушел мучать sshagent

pipeline {
    agent any  // Вы можете указать конкретный агент, если нужно

    stages {
        stage('Clone Repository') {
            steps {
                git 'https://github.com/traefik/whoami.git'
            
            }
        }
        stage('Build Repository') {
            steps {
                sshagent(['ssh-user-credential-id']) {
                        sh "ssh -o StrictHostKeyChecking=no user@host 'echo password | sudo -S docker build -t zaya /var/lib/docker/volumes/pipline_jenkins_home/_data/workspace/sborka'"

                }            
            }
        }  
    }
}


В итоге собрал костыльную автоматизированную сборку. Да, нужно вынести отдельного пользователя и дать права на докер чтоб не светить пароль. Но возник вопрос, как при сборке через ssh хост узнает по какому адресу был клонирован git проект? Изначально я думал что проект будет лежать по наименованию который я сам назвал. Но зайдя по адресу где лежит проект я также увидел куча клонов созданных самим Jenkins без моего ведома.
sborka - основной
sborka@2
sborka@2@temp
sborka@temp

Опыта с CICD у меня 6 часов. Может я что-то упустил. Или технология эта все еще сырая. И стоит на что-то другое посмотреть? Или есть у Jenkins красивое и элегантное решение как делать сборку из контейнера?
  • Вопрос задан
  • 31 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы