ansible tips and tricks
#ansible #ssh #jenkins
Бывают ситуации, когда надо в автоматизированном режиме коннектиться к некоей виртуальной машине, у которой будет один и тот же ip адрес, но ssh-ключи каждый раз разные. ssh будет ругаться на то что информация о хосте поменялась и фейлить ваш плейбук, а jenkins - сборку.
Решение:
ansible
занести в ansible.cfg строку
или добавить в environment:
groovy script\Jenkinsfile\ssh
подключаться с параметрами:
#ansible #ssh #jenkins
Бывают ситуации, когда надо в автоматизированном режиме коннектиться к некоей виртуальной машине, у которой будет один и тот же ip адрес, но ssh-ключи каждый раз разные. ssh будет ругаться на то что информация о хосте поменялась и фейлить ваш плейбук, а jenkins - сборку.
Решение:
ansible
занести в ansible.cfg строку
host_key_checking = False
или добавить в environment:
export ANSIBLE_HOST_KEY_CHECKING = False
groovy script\Jenkinsfile\ssh
подключаться с параметрами:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <user>@<ip> <command>
список тегов, используемых в канале:
—-------------------------------
Лекции и материалы
—-------------------------------
#Занятие
#Лекции
Лекция
—---------
Linux
—---------
#ssh
#bash
#awk
#tmux
#console
#utils
#troubleshooting
#nmap
—----------
DevOps
—----------
#jenkins
#ansible
#git
kubernetes
—------------------
Virtualization
—------------------
#vmware
vagrant
—------------------
Networking
—---------------—
#networking
—---------
InfoSec
—---------
#vulns
—-------------
Windows
—-------------
#RDTS
#windows_server2012
#RDP
—------------------------------------------------
Ссылки и сторонние материалы
—------------------------------------------------
#read
#thirdparty
UPD 28/12/17
—-------------------------------
Лекции и материалы
—-------------------------------
#Занятие
#Лекции
Лекция
—---------
Linux
—---------
#ssh
#bash
#awk
#tmux
#console
#utils
#troubleshooting
#nmap
—----------
DevOps
—----------
#jenkins
#ansible
#git
kubernetes
—------------------
Virtualization
—------------------
#vmware
vagrant
—------------------
Networking
—---------------—
#networking
—---------
InfoSec
—---------
#vulns
—-------------
Windows
—-------------
#RDTS
#windows_server2012
#RDP
—------------------------------------------------
Ссылки и сторонние материалы
—------------------------------------------------
#read
#thirdparty
UPD 28/12/17
обращение по DNS в kubernetes между namespace
Исходные данные:
service name = jenkins
namespace = jenkins
Тогда, например, для пуша в jenkins можно сформировать такой web-hook:
#kubernetes #jenkins #git
Исходные данные:
service name = jenkins
namespace = jenkins
Тогда, например, для пуша в jenkins можно сформировать такой web-hook:
http://<user>:<token>@jenkins.jenkins.svc.cluster.local:8080/job/my-super-job/build
#kubernetes #jenkins #git
Список тегов, используемых в канале:
—-------------------------------
Лекции и материалы
—-------------------------------
#Занятие
#Лекции
Лекция
#junior
—---------
Linux
—---------
#ssh
#bash
#bash_tips_and_tricks
#awk
#tmux
#console
#utils
#troubleshooting
#nmap
#apt
#bind
#sound
#power_management
—----------
DevOps
—----------
#jenkins
#ansible
#git
#kubernetes
#deploy
#ceph
#docker
#puppet
—------------------
Virtualization
—------------------
#vmware
vagrant
—------------------
Networking
—---------------—
#networking
#proxy
#socks
—---------
InfoSec
—---------
#vulns
#security
#ctf
—-------------
Windows
—-------------
#RDTS
#windows_server2012
#RDP
—------------
Datacenters
—---------—
#ovh
#hetzner
—-------
Other
—-------
#android
#jira
—------------------------------------------------
Ссылки и сторонние материалы
—------------------------------------------------
#read
#thirdparty
Updated: 29.05.18
—-------------------------------
Лекции и материалы
—-------------------------------
#Занятие
#Лекции
Лекция
#junior
—---------
Linux
—---------
#ssh
#bash
#bash_tips_and_tricks
#awk
#tmux
#console
#utils
#troubleshooting
#nmap
#apt
#bind
#sound
#power_management
—----------
DevOps
—----------
#jenkins
#ansible
#git
#kubernetes
#deploy
#ceph
#docker
#puppet
—------------------
Virtualization
—------------------
#vmware
vagrant
—------------------
Networking
—---------------—
#networking
#proxy
#socks
—---------
InfoSec
—---------
#vulns
#security
#ctf
—-------------
Windows
—-------------
#RDTS
#windows_server2012
#RDP
—------------
Datacenters
—---------—
#ovh
#hetzner
—-------
Other
—-------
#android
#jira
—------------------------------------------------
Ссылки и сторонние материалы
—------------------------------------------------
#read
#thirdparty
Updated: 29.05.18
Jenkins kill zombie job
Если ни тыкание на крестик, ни перезагрузка сервера не помогают дропнуть зависшую день-два-месяц назад задачу, то можно дропнуть ее через консоль (Manage Jenkins -> Script Console). И вам надо заполнить 2 переменные - имя задачи и ее номер.
Если ни тыкание на крестик, ни перезагрузка сервера не помогают дропнуть зависшую день-два-месяц назад задачу, то можно дропнуть ее через консоль (Manage Jenkins -> Script Console). И вам надо заполнить 2 переменные - имя задачи и ее номер.
Jenkins.instance.getItemByFullName("JOB_NAME")#jenkins #troubleshooting
.getBuildByNumber(JOB_ID)
.finish(
hudson.model.Result.ABORTED,
new java.io.IOException("Aborting build")
);
Jenkins heartbeat error
err:
В моем случае jenkins находится в k8s, катал его с помощью helm. В качестве решения в values.yaml:
#jenkins #kubernetes #helm #troubleshooting
err:
wrapper script does not seem to be touching the log file in xxxxx
(JENKINS-48300: if on a laggy filesystem, consider -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=300)
В моем случае jenkins находится в k8s, катал его с помощью helm. В качестве решения в values.yaml:
Master:
JavaOpts: "-Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=3600"
#jenkins #kubernetes #helm #troubleshooting
Самая простая нотификация ботом в slack
1) Нужно создать приложение, авторизуемся в слаке через веб интерфейс и начинаем мучать их api вот тут . Само по себе приложение уже умеет играть роль уведомлялки, а нам впринципе этого и достаточно (для более сложного ботоводства с интерактивом рекомендуется создавать пользователя-бота в приложении). Как вы приложение назовете, от этого имени и будете получать сообщения в канал или ЛС.
2) создаем канал в вашем workspace. Если нужно делаем его приватным.
Вот тут самое важное отступление ради которого делается эта заметка. Приложение НЕ надо добавлять в приватый канал. НЕ надо жать эту чертову кнопку "add an app". Оно добавится туда автоматически после создания Incoming Webhook.
3) Продолжая мучать апишку, на страничке Incoming Webhooks в свойсвах вашего приложения активируем эту фичу и создаем новый веб хук. При создании указываем канал или пользователя, которому хотим писть сообщения.
На этом впринипе все. Дальше вам даже для удобства сформируют примитивную строку с curl, типа
Пример нотификации из jenkins:
#jenkins #slack #bot
1) Нужно создать приложение, авторизуемся в слаке через веб интерфейс и начинаем мучать их api вот тут . Само по себе приложение уже умеет играть роль уведомлялки, а нам впринципе этого и достаточно (для более сложного ботоводства с интерактивом рекомендуется создавать пользователя-бота в приложении). Как вы приложение назовете, от этого имени и будете получать сообщения в канал или ЛС.
2) создаем канал в вашем workspace. Если нужно делаем его приватным.
Вот тут самое важное отступление ради которого делается эта заметка. Приложение НЕ надо добавлять в приватый канал. НЕ надо жать эту чертову кнопку "add an app". Оно добавится туда автоматически после создания Incoming Webhook.
3) Продолжая мучать апишку, на страничке Incoming Webhooks в свойсвах вашего приложения активируем эту фичу и создаем новый веб хук. При создании указываем канал или пользователя, которому хотим писть сообщения.
На этом впринипе все. Дальше вам даже для удобства сформируют примитивную строку с curl, типа
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/T0XXX/BXXXXX/ZZZZZZСамое главное для понимания - плюс этого способа это его же минус. за счет простоты создания мы лишаемся любых других возможностей. Т.е. в данной ситуации, создавая вебхук мы жестко связываем конкретную ссылку с конкретным каналом и конкретным ботом. Больше никуда по этому урлу мы постить не сможем. Но для мониторинга или сообщений о сборках из jenkins подойдет без проблем.
Пример нотификации из jenkins:
node {Здесь остается только создать секрет с веб хуком или поместить урл не скрывая его в рамках тестов.
stage('Notify') {
text = "HELLO FROM JENKINS"
withCredentials([string(credentialsId: 'ZZZZZ', variable: 'SLACK_WEB_HOOK')]) {
httpRequest(httpMode: 'POST',
url: env.SLACK_WEB_HOOK,
contentType: 'APPLICATION_JSON',
requestBody: "{\"text\": \"${text}\"}",
responseHandle: 'NONE',
consoleLogResponseBody: true,
validResponseCodes: '200')
}
}
}
#jenkins #slack #bot
Интегрируем проверку на уязвимости в CI
The Anchore Engine is an open source project that provides a centralized service for inspection, analysis and certification of container images.
https://github.com/anchore/anchore-engine
https://medium.com/devopslinks/step-by-step-guide-to-integrate-opensource-container-security-scanner-anchore-engine-with-cicd-580da8db5dfc
#docker #jenkins #security
The Anchore Engine is an open source project that provides a centralized service for inspection, analysis and certification of container images.
https://github.com/anchore/anchore-engine
https://medium.com/devopslinks/step-by-step-guide-to-integrate-opensource-container-security-scanner-anchore-engine-with-cicd-580da8db5dfc
#docker #jenkins #security
Jenkins global pipeline
В jenkins есть такая удобная штука, которая называется Global Pipeline Libraries. Найти можно по пути manage jenkins -> configure system. Фишка этой штуки заключается в том, что можно описать в некотором репозитории список функций, а затем в любом pipeline эти функции каждый раз писать уже не надо и ваш jenkinsfile может состоять вообще из вызова одной функции с какими-то специфичными для этого pipeline параметрами.
Экономит время, когда у вас множество одинаковых проектов.
#jenkins
В jenkins есть такая удобная штука, которая называется Global Pipeline Libraries. Найти можно по пути manage jenkins -> configure system. Фишка этой штуки заключается в том, что можно описать в некотором репозитории список функций, а затем в любом pipeline эти функции каждый раз писать уже не надо и ваш jenkinsfile может состоять вообще из вызова одной функции с какими-то специфичными для этого pipeline параметрами.
Экономит время, когда у вас множество одинаковых проектов.
#jenkins
Чистим старые задачи в jenkins
#jenkins
find jobs/ -name builds -exec find {} -maxdepth 1 -mtime +180 -type d \; | while read LINE; do [ $(basename "$LINE") == "builds" ] || rm -rv "$LINE" ; done
#jenkins
Jenkins stuck at startup
Если в логах этой чудо-поделки нет критических ошибок, но все-равно jenkins не стартует (особенно бывает после обновления), проверьте, там явно где-то зависшие java-процессы, которые сохраняются даже после останова службы jenkins через systemd. После их безжалостностного расстрела перезапустите службу и все заработает
#javaпомойка #jenkins
Если в логах этой чудо-поделки нет критических ошибок, но все-равно jenkins не стартует (особенно бывает после обновления), проверьте, там явно где-то зависшие java-процессы, которые сохраняются даже после останова службы jenkins через systemd. После их безжалостностного расстрела перезапустите службу и все заработает
#javaпомойка #jenkins
jenkins enable ssl in docker
## on host
1) install openjdk (example for mac)
4) put jenkins_keystore.jks to /var/jenkins-data
5) run docker (part of systemd unit file)
http://code.haleby.se/2016/01/22/enable-ssl-in-jenkins-in-docker/
#jenkins
## on host
1) install openjdk (example for mac)
brew cask install java2) generate p12 (u must already have web-certificates)
openssl pkcs12 -export -in cert.pem -inkey key.pem -out jenkins.p123) generate .jks
keytool -importkeystore -srckeystore jenkins.p12 -srcstoretype PKCS12 -destkeystore jenkins_keystore.jks -deststoretype JKS## on jenkins server
4) put jenkins_keystore.jks to /var/jenkins-data
5) run docker (part of systemd unit file)
ExecStart=/usr/bin/docker run --rm -a STDIN -a STDOUT -a STDERR \
-u root \
-p 50000:50000 \
-p 443:8443 \
-v /var/jenkins-data:/var/jenkins_home \
--name jenkins \
jenkins/jenkins:lts \
--httpPort=-1 \
--httpsPort=8443 \
--httpsKeyStore=/var/jenkins_home/jenkins_keystore.jks \
--httpsKeyStorePassword=1234
http://code.haleby.se/2016/01/22/enable-ssl-in-jenkins-in-docker/
#jenkins