Админим с Буквой
5.52K subscribers
303 photos
8 videos
59 files
1.16K links
Канал о системном администрировании, DevOps и немного Инфобеза.

По всем вопросам обращаться к @bykva. Рекламу не размещаю.
Download Telegram
ansible tips and tricks

#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
обращение по DNS в kubernetes между namespace

Исходные данные:
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
Jenkins kill zombie job

Если ни тыкание на крестик, ни перезагрузка сервера не помогают дропнуть зависшую день-два-месяц назад задачу, то можно дропнуть ее через консоль (Manage Jenkins -> Script Console). И вам надо заполнить 2 переменные - имя задачи и ее номер.

Jenkins.instance.getItemByFullName("JOB_NAME")
.getBuildByNumber(JOB_ID)
.finish(
hudson.model.Result.ABORTED,
new java.io.IOException("Aborting build")
);

#jenkins #troubleshooting
Jenkins heartbeat error

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, типа

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
Jenkins global pipeline

В jenkins есть такая удобная штука, которая называется Global Pipeline Libraries. Найти можно по пути manage jenkins -> configure system. Фишка этой штуки заключается в том, что можно описать в некотором репозитории список функций, а затем в любом pipeline эти функции каждый раз писать уже не надо и ваш jenkinsfile может состоять вообще из вызова одной функции с какими-то специфичными для этого pipeline параметрами.

Экономит время, когда у вас множество одинаковых проектов.

#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 enable ssl in docker

## on host

1) install openjdk (example for mac)

brew cask install java

2) generate p12 (u must already have web-certificates)

openssl pkcs12 -export -in cert.pem -inkey key.pem -out jenkins.p12

3) 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