LINUX.ORG.RU

15
Всего сообщений: 112

Jenkins переменная на удаленном сервере

Добрый день

Пытаюсь из jenkins выполнить shell скрипт на удаленном сервере и не пойму как в командную строку на удаленном сервере передать переменную BUILD_ID

 ,

Bajenko ()

git plugin in jenkins worknt

jenkins-2.235.1-1.1 git plugin 4.3.0 (экспериментировал откатывая до 4.2.2)

создаю задание, говорю читать ему source из git прописываю в jenkins Credentials ssh username with private key

и получаю Failed to connect to repository : Error performing git command: git ls-remote -h ssh://username@git/home/username/srv/git/project.git HEAD

проверяю пути, имя пользователя, права итд просто проверяю возможность подключения с хоста jenkins на git

ssh username@git $whoami username

дошел до того что для проверки в Repository URL прописал публичный https://github.com/nginx/nginx.git соотвественно без логиновпаролей получаю Failed to connect to repository : Error performing git command: git ls-remote -h https://github.com/nginx/nginx.git HEAD

ерунда какая-то

 ,

foxykoff ()

DevOps инженер , от 40000 руб., удаленная работа

Требуемый опыт работы: 3–6 лет Полная занятость, полный день

Обязанности: • Помощь в обеспечении бесперебойной работы сети и серверов компании; • Администрирование серверов на базе ОС семейства *nix (в основном Ubuntu и CentOS); • Администрирование и поддержка системы виртуализации на базе VMware; • Администрирование учетных записей и прав пользователей во всех системах компании; • Поддержка и изменение при необходимости процессов CI/CD на базе gitlab, jenkins; • Поддержка коллектива программистов на различных проектах, настройка процессов CI/CD, настройка ландшафтов для разработки.

Требования: • Опыт администрирования linux, написания bash скриптов; • Опыт настройки CI/CD gitlab или Jenkins; • Опыт работы с docker контейнерами, docker-compose; • Администрирование Active directory.

Условия: • Интересные, разнообразные задачи с высоким уровнем ответственности; • Мы заботимся о здоровье сотрудников - ДМС; • Обмен опытом в команде увлеченных профессионалов, а также обучение и развитие навыков опытными наставниками; • Конкурентоспособная полностью «белая зарплата», без скрытых условий и «переменных частей»; • Коллектив, который продуктивно работает и также отдыхает:); • Офис с прекрасной транспортной доступностью; • Оформление с первого дня согласно ТК РФ; • Прозрачная система карьерного и материального роста; • Чай, кофе и сладости в офисе, все по канонам; • Уровень зарплаты может корректироваться в большую сторону при наличии соответствующего опыта и компетенций.

Ключевые навыки Bash CentOS Linux Unix Shell Scripts GitCI/CD Jenkins Docker DevOps Kubernetes

Если у тебя остались вопросы - пиши нам на hr@migogroup.ru - мы расскажем обо всех интересующих деталях и будем рады знакомству :)

 , ,

MIGO_GROUP ()

Pipeline для jenkins на pull image приватного репозитория докера

Добрый день! Поделитесь пожалуйста pipeline’ом,этапом, jenkinsa для pull images из приватного репозитория докера. При этом jenkins и репозиторий с докером на разных хостах. Разобрался как заливать образ на репозиторий,а вот pull правильно сделать не получается.

 , ,

Slavkavtanke ()

Как накатываете миграции

Коллеги, а кто как делает миграции в jenkins для clickhouse ( с mysql в click и обратно ) ?

 , ,

pinachet ()

Копирование файлов из репозитория на хостовую тачку

Всем добрый день! Такой вопрос, имеется конструкция: dir (‘ansible/Deploy_New_Container’) { sh ‘ansible-playbook deploy.yml’ }

Соответственно из директории на битбакете он цепляет файл деплоя и запускает его. Вопрос такой: можно ли как то скопировать все файлы из ansible/Deploy_New_Container на тачку, куда будет разворачиваться этот деплой?

 

sergei5770 ()

Последовательность автозагрузки сервисов

К Azure VM смонтированы диски, на которых при загрузке системы должны создаться рабочие slave workspace folders для jenkins agent, для чего написан сервис ниже и скрипт, создающий эти каталоги. Код скрипта и сервиса работают безупречно при уже запущенной системе, но не работают, как должны при загрузке CentOS. Проблема наверняка в том, что сервис пытается создать нужные каталоги на подключаемом диске, когда он еще не смонтирован. Какой наиболее правильный способ для решения этой проблемы? p.s. Попытки поставить различные варианты сервисов в «After=» пока безуспешны. В интернет предлагаются решения с написанием своего сервиса, который делает sleep на какое-то время и делать запуск после него, но такой способ видится не оптимальным.

[Unit]
Description=Script for jenkins_agent folder after poweroff VM
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/jenkins-slave.sh
TimeoutStartSec=0

[Install]
WantedBy=default.target

и сам скрипт:

#!/bin/bash
#Script for jenkins_agent folder after poweroff VM
sudo mkdir /mnt/resource/jenkins_agent

 , , ,

unlimuser ()

результаты автотестов по почте

Здравствуйте, есть набор python-скриптов… Есть дженкинс, который запускает эти python-скрипты(фактически, автотесты). Нужно как-то связать результаты выполнения этих тестов (failed или не failed) с посылкой почты определенным людям. Понимаю, что можно написать самому скриптик отправки на почту результатов, но мне кажется, что сейчас так никто не делает.

  1. Можно ли как-то сделать это через дженкинс?
  2. Можно ли скармливать дженкинсу какой-то файл результатов? Если да, то что за формат такого файла? Или хотя бы что погуглить
  3. Как в go такие вещи бы решались? Чисто ради расширения кругозора

Гуглить пробовал, но, честно говоря, от обилия инфы глаза разбегаются: много воды, и сути практически нигде нету. Помогите…

 , , , ,

xperious ()

CD/CI Pipeline (github, jenkins, docker, k8s)

Хочу разобраться как настраивать CD/CI Pipeline по науке, чтобы код из репо github оказался запущенным на kubernetes кластере. Предполагается, что код нужно компилировать. Я уже более-менее во всем разобрался, хочу вынести свои мысли на обсуждение, чтобы понять правильно ли я понял концепцию и не нарушаю ли я какие-то принципы.

И так, сначала грубое представление:
 
1. Скачиваем исходный код с github repo
2. Компилируем и собираем docker image
3. Заливаем этот image на docker repo
4. Разворачиваем pod (или deployment) на k8s кластере из image, который мы залили на docker repo.

Архитектура:
* github repo

* jenkins server
  +docker
  +development tools(для компиляции)
  +kubectl (для управления k8s кластером)

* docker repo (я выбрал AWS ECR)

* k8s cluster

Права доступа, авторизация и т.п.:

1. Из публичного github repo можно брать сырцы свободно, если это private repo, то нужно установить plugin для jenkins, который позволяет авторизовываться по сертификату.

2. Для того, чтобы jenkins мог работать с docker нужно добавить пользователя jenkins в группу docker

3. Для того, чтобы docker мог заливать images на docker repo, нужно приладить скрипт (и awscli), который будет регулярно запрашивать токены у AWS ECR и обновлять их в папке ~/.docker пользователя jenkins.

4. Для того, чтобы jenkins мог управлять k8s кластером, нужно скопировать на сервер бинарник kubectl и добавить файл config с ключами в папку ~/.kube для пользователя jenkins

5. Для того, чтобы k8s cluster мог получать images с docker repo, нужно приладить cronejob, который будет регулярно запрашивать токены у AWS ECR и обновлять у себя secrets авторизации с docker repo.

У меня как-то так получилось, нормально?

 , , , ,

samson_b ()

Выполнить команду от sudo через пользователя

Поставил CentOS8, добавил пользователя, запретил логин через ssh по руту.

В Jenkins добавил доступы к серверу через ssh, подключаюсь к серверу, пушу код, а потом нужно сделать рестарт сервера через systemctl restart <serviceName>

Jenkins пытается выполнить команду echo ${ROOT_PWD} | sudo -S systemctl restart <serviceName> и получает в ответ

We trust you have received the usual lecture from the local System

Administrator. It usually boils down to these three things:



    #1) Respect the privacy of others.

    #2) Think before you type.

    #3) With great power comes great responsibility.



[sudo] password for rmnsc: Sorry, try again.

[sudo] password for rmnsc: 

sudo: 1 incorrect password attempt

Что я пропустил при настройке сервера

 ,

jashka ()

Извлечь из стринга пары ключ-значение

Скрипт на Groovy вызывает внешнюю функцию, которая берёт с сервера набор данных в виде пар ключ-значение и возвращает их скрипту в виде такого многострочного стринга:

{
  "TEST_NAME" : "test1",
  "SUCCESS" : "False"
}

Как из неё проще всего извлечь данные? Пока нужно только проверить условие SUCCESS = True, но в дальнейшем может понадобиться что-то более сложное. В идеале требуется простой способ превратить такой стринг в Map, не требующий внешних библиотек. Парсить регулярными выражениями? Или есть более простые способы?

Если интересны подробности, это потребовалось для взаимодействия Дженкинса с ActiveMQ. Груви начал изучать только вчера. Так как скрипты выполняются с кучей ограничений, не думаю, что позволит импортировать groovy.json.JsonBuilder/JsonSlurper.

Ответ: позволил :)

import groovy.json.JsonSlurper

node {
    stage('Start process') {
        sendCIMessage failOnError: true, 
            messageContent: '', 
            messageProperties: '', 
            messageType: 'Custom', 
            overrides: [], 
            providerName: 'Sender'
    }
    stage('Get answer') {
            def messageContent = 
                waitForCIMessage checks: [], 
                    providerName: 'Receiver', 
                    selector: 'TEST_NAME = test1'
                    timeout: 1
            echo messageContent
            def jsonSlurper = new JsonSlurper()
            def map = jsonSlurper.parseText( messageContent )
            if (map.SUCCESS == 'True')
                print 'succeeded'
            else if (map.SUCCESS == 'False')
                print 'failed'
            else 
                print 'wrong answer'            
    }
}

 ,

olegd ()

Jenkins и Samba

Понадобилось грузить файлы из Дженкинса на виндовый файловый сервер. Нашёлся специальный плагин для этого: https://plugins.jenkins.io/publish-over-cifs Но при попытке проверить соединение появляется непонятная ошибка:

ERROR: Exception when publishing, exception message [Exception when testing config. URL [smb://172.30.0.58/share/], Message: [Failed to connect: 0.0.0.0<00>/172.30.0.58]]

Поискав, обнаружил обсуждение от 2017 года – https://groups.google.com/forum/#!topic/jenkinsci-users/O-DH2XUBRt8 – где говорится, что плагин использует библиотеку jCIFS, которая не понимает новый диалект и требует даунгрейдить SMB до версии 1, уязвимой к WannaCry. Но скоро её заменят на SMBJ.

Поискав в исходниках – https://github.com/jenkinsci/publish-over-cifs-plugin – нашёл упоминания jCIFS в 7 местах, и ни одного SMBJ.

По-прежнему, глухо? Средствами Дженкинса не реализуемо?

 , ,

olegd ()

Devops инженер Лондон

Всем Привет! Начну с себя зовут меня Алексей, ищу хорошего специалиста в компанию. Сейчас нужны инженеры Devops. После всех шагов к цели работать придется на территории Великобритании, точнее г. Лондоне. IT компания делает сервисы для облачных приложений. Добавлю что, компания занимается оптимизацией бизнеса с помощью ИТ-консалтинга, разработки программного обеспечения и обучения.

Ищется инженер по сборке, обладающий компетенциями Devops в контексте развёртывания облачных решений в автоматическом режиме. Организация использует nodeJS и как следствие javascript. Знание этого ЯП требуется, так как инженер будет выполнять ручное слияние и валидацию посредством CI изменений в коде, выполненных сторонними разработчиками и зарегистрированными в системе контроля версий Git (что накладывает дополнительное требование в продвинутом понимании работы Git, что в большинстве случаев линейным разработчикам не требуется и таковыми знаниями они не обладают.

Обязанности:

  • Разработка, тестирование и поддержка сценариев сборки и развертывания в CI/CD framework/tools для автоматизации и оптимизации процессов развертывания
  • Выполнение развертываний, слияний и обновлений ПО
  • Подготовка и ведение документации и отчетов по установкам, процедурам и требованиям к системам
  • Мониторинг и тестирование приложений на всех этапах жизненного цикла

Требования:

  • Знание методологии Devops
  • Умение автоматизировать процессы развертки и сборки программного обеспечения (Jenkins, Chef, Terraform, Ansible, Shell Scripting и Linux-системой)
  • Навыки в работе по синхронизации этапов создания программного продукта: от написания кода до тестирования и выпуска приложения Хороший опыт в написание скриптов и кодирование в среде nodeJS Опыт работы с облачными платформами, предпочтительно Azure и Google Cloud Знания в построении контейнера программной инфраструктуры (Docker)
  • Уверенные навыки по автоматизации, интеграция и настройка платформы CI / CD
  • Умение контролировать и организовывать процессы разработки в GIT
  • Участие в создании архитектуры распределенных систем и микросервисов
  • Образование высшее (инженер)
  • Хорошее знание английского языка.

До собеседования могу сказать ЗП от 2500уе до 5000

Присылайте сюда вопросы, а в почту резюме. Способ связи: don@profil.ru

 , , ,

Miller909 ()

pg_restore exit code; игнорирвоание несущественных ошибок — как лучше поступить?

Привет.

Задача: у нас есть прод-среда (prod-server) и тестовая среда (test-server). На обеих серверах есть база данных postgres, и иногда наши аналитики ставят задачу на «рефреш» базы данных (сдампить прод-среду и перелить данные на тестовую). Мне это надоело руками делать и пришла в голову гениальная идея: сделать это через Jenkins.

Чтобы аналитики заходили в Jenkins, нажимали одну кнопку и сами обновляли базу без нашего участия. Типа этого: https://imgur.com/a/hU1AEwS

Вопрос 1: Aдекватно ли использовать Jenkins в данном случае? Просто Jenkins создан в первую очередь для разработки, а не таких задач, насколько я понимаю... Если не адекватно — что можно использовать? Надо бесплатное решение и Open Source, компания вряд ли будет закупать что-то новое по нашим хотелкам.

----------------------------

Окей, я написал такой простой сценарий в Jenkins:

#enable debug mode and stop script ib case of errors
set -x
set -e

unset PGCLUSTER

#generate file name
if [[ "$databse_dump_date" == "latest" ]]
then 
dump_name=bars_web_bb_`date  -d "1 day ago"  "+%F"`.dump
else
dump_name=bars_web_bb_$databse_dump_date.dump
fi

#copy dump from backup server to /tmp/
scp -o "ProxyCommand=ssh -q -N -W %h:%p my_username@192.168.221.35" root@172.153.153.54:/backups/daily_backups/$dump_name /tmp/

#block all new connection
psql -c "ALTER DATABASE web_bb_chelyab CONNECTION LIMIT 0;"

#recreate database
psql -c "select pg_terminate_backend(pid) from pg_stat_activity where datname='web_bb_chelyab';"
psql -c "DROP DATABASE web_bb_chelyab;"
psql -c "CREATE DATABASE web_bb_chelyab OWNER bars_web_bb;"

#restore_database
pg_restore -U bars_web_bb -d web_bb_chelyab -j 2 /tmp/$dump_name
psql -c "ALTER DATABASE web_bb_chelyab CONNECTION LIMIT -1;"

#remove dump
rm -f /tmp/$dump_name

То есть просто копируем дамп через scp, пересоздаём базу данных, делаем pg_restore. Всё бы хорошо, но нет. При тестировании обнаружил ошибку:

+ pg_restore -U bars_web_bb -d web_bb_chelyab -j 2 /tmp/bars_web_bb_2019-08-15.dump
CREATE DATABASE
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 34405; 0 0 COMMENT EXTENSION plpgsql 
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
    Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';



WARNING: errors ignored on restore: 1
[SSH] exit-status: 1
Build step 'Execute shell script on remote host using ssh' marked build as failure
[BFA] Scanning build for known causes...
[BFA] No failure causes found
[BFA] Done. 0s
Finished: FAILURE

И Jenkins-job завершился аварийно, так как при выполнении команды pg_restore произошли незначительные ошибки.

Углубившись в эту тему, я нашёл тему на stackoverflow: https://stackoverflow.com/questions/32147653/how-do-i-reliably-determine-whet...

Типа pg_restore почти всегда игнорирует ошибки при восстанволении, и, в конечном счёте, возвращает не 0, а 1. Он не умеет определять, какие ошибки критичные, а какие нет. В моём случае из-за незначительных ошибок jenkins-job не завершился корректно.

Вопрос 2: как лучше поступить в моём случае, чтобы Jenkins-Job игноировал незначительные ошибки? В голову приходит только этот вариант:

set -x
set -e
...
[копирование дампа, set -e нужен, чтобы не начинать восстанволение, если scp авершится неудачно]
set +e #убираем set -e, чтобы не прерывать скрипт в случае незначительных ошибок в pg_restore
pg_restore -U bars_web_bb -d web_bb_chelyab -j 2 /tmp/$dump_name
set -e [снова включаем set -e]
psql -c "ALTER DATABASE web_bb_chelyab CONNECTION LIMIT -1;"

#remove dump
rm -f /tmp/$dump_name

Этот вариант адекватен? Есть ли лучше способы?

 ,

iljuase ()

Установка jenkins при помощи ansible

Доброго времени суток Изучаю ansible, стролкнулся со следующей проблемой. Установил jenkins при помощи rpm, если захожу на web интерфейс, то вижу окно «Unlock Jenkins», собственно надо взять пароль локально на хосте и вбить туда. Перепробовал множество рецептов из гугла, но так и не добился результата. Собственно что я хочу 1. Разблокировать jenkins при помощи ansible (именно разблокировать, а не отключить защиту, так получилось но это не совсем то) 2. Завести пару пользователей.

Основная проблема, как мне кажется, это не понимание web структуры, пробовал рецепты curlом, но не один не заработал. Просьба подсказать или натолкнуть на мысль как же в итоге мне это исправить и добиться желаемого.

 ,

dazzzdranagon ()

IP Jenkins

Такая ситуация...Jenkins находится на AWS, IP адрес я прописал в Configure System > Jenkins Locations >> Jenkins URL. После того, как сервер перезагрулися IP сменился. Jenkins недоступен. Подскажите пожалуйста, как можно поменять старый IP на новый из консоли(графический интерфейс недоступен)? В /var/lib/jenkins и /etc/default/jenkins ничего не нашел...

 , ,

RaptorsWings ()

кто нибудь подключал sonarqube для gradle в jenkins pipeline через https ?

Cитуация такая:
анализ кода в сонаре работает.
В вэб-интерфейсе sonarqube вижу новый проект и его оценку.
Сонар выдает уникальную ссылку, куда jenkins должен пойти и взять оцунку кода (Quality Gate).
Во время QG он ругается на неправильный сертификат.
Вот ошибка:

Caused: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Caused: java.lang.IllegalStateException: Fail to request https://sonarqube.mydomain.com/api/ce/task?id=AWrF1KMi5rFjyTWTGqln

 , , ,

dada ()

Запуск докер контейнера в ОЗУ

Вопрос в следующем, у меня Jenkins с помощью плагина Kubernetes, запускает сборку контейнеров внутри подов в среде Kubernetes с помощью kaniko, хочу ускорить это дело, так как основная проблема скорости сборки в IO диска, при сборке контейнера kaniko распаковывает основной образ и все слои в / (root директори), из-за этого просто примонтировать рам диск в определенный каталог я не могу, как быть в таком случае? Может кому то удавалось решить такую проблему, что бы файловая система контейнера была полностью в ОЗУ сервера.

 , , , ,

BartMan ()

Jenkins. Создание динамеских агентов.

Добрый день, ребятa. Я пытаюсь додуматься, как можно создать динамического агента с помощью запуска команды docker run. Задача такая: запускать команду docker run и чтобы создавались динамические агенты...команды докера работают. Подскажите пожалуйста, как можно это реализовать?

 , ,

RaptorsWings ()

ci/cd статики с помощью jenkins + docker

Я хочу улучшить тот процесс который есть у меня сейчас в выкатке статичного сайта

как это устроено сейчас: single page application + firebase, два разработчика (windows/macOS) на сервере линукс. У меня опыта в devOps ноль, уже несколько недель пробую разобраться - голова кипит :(

1) jenkins раз в минуту мониторит мастер ветку, когда там появился новый код он запускает несколько команд 
 - npm install
 - npm run build
 - мой скрипт на ноде который догенеривает статику
 - команду для деплоя директории со статикой на гугл сервер (VM))
2) на гугл сервере apache 

Проблемы которые есть

1) jenkins стоит у одного из разработчиков на локальной машине на windows.
и переодически он зависает без понятных причин
думаю если засунуть jenkins в докер то его можно релизнуть на любой сервер с линуксом + запускать локально не зависимо от операционки
2) мы (разработчики) не видим локально финального результата.
Если финальный код засунуть в docker мы сможем его локально тестировать, и если все локально норм - получим ровно такую-же картину на сервере) 

Если я буду держать финальный код в докере, каким образом он (докер образ?) должен создаваться, с помощью jenkins? А каким образом релизится?

Вопрос насколько правильно я мыслю? Решит ли docker и jenkins мои проблемы?

 , ,

abs ()