Як встановити Jenkins на CentOS 7
Jenkins — популярний інструмент CI (безперервна інтеграція) з відкритим кодом, який широко використовується для розробки, розгортання та автоматизації проектів. Ця стаття буде
Є багато способів автоматизувати процес налаштування та налаштування коробки. З будь-якої причини, якщо вся наша система на даний момент складається лише з однієї коробки, налаштувати повну інфраструктуру SCM (Управління конфігурацією програмного забезпечення) буде зайвим. Одним з варіантів є сценарії оболонки, але ми також можемо використовувати зменшену версію SCM, яка доступна в деяких інструментах. Chef — один із популярних варіантів, а «chef-solo» — це автономний режим конфігурації Chef, де нам не потрібен додатковий вузол, щоб діяти як «кухар-сервер». Все, що йому потрібно, це URL-адреса або шлях до пакета tarball, який містить кулінарні книги шеф-кухаря. Порівняно зі сценаріями оболонки, цей тип підходу є більш декларативним та ефективним із коробки, а також є хорошим вступом для початку роботи з процесами SCM або IaC (інфраструктура як код).
«Рецепти» всередині «кулінарної книги» шеф-кухаря мають DSL на основі ruby, який описує «ресурси» у певному стані на вузлі. Давайте перейдемо до покрокової інструкції, щоб ознайомитися з кількома концепціями Chef, які також застосовні до chef-solo. Наша мета — налаштувати вузол Ubuntu під керуванням веб-програми Python/Django за допомогою Gunicorn і NGINX.
Note: We do not necessarily require ChefDK to be installed on our "Chef workstation" (our machine), although with it, we can use 'chef generate' commands to start-off with a directory structure for creating cookbooks, recipes and more. In this article, we will assume ChefDK is installed on our workstation. Commands were run using the version 4.7.26-1 of ChefDK.
(Все, починаючи з цього моменту, якщо не вказано інше, буде запущено на нашій машині, також званій «Робочою станцією кухаря»)
Cookbooks in chef — це багаторазові блоки, які містять все необхідне для підтримки сценарію конфігурації. Кулінарні книги можуть містити кілька «рецептів», а «рецепти» в основному складаються з шаблонів ресурсів. default.rb
це рецепт за замовчуванням, який запускатиметься, коли на кулінарну книгу буде посилання в списку виконання . Різні рецепти дозволяють розділити проблеми. Однак для цього підручника ми додамо всі оголошення ресурсів в один основний файл рецепта, який є default.rb
.
Створіть папку з назвою «my-chef-project» і створіть всередині неї папку під назвою «cookbooks». З ./my-chef-project/cookbooks/
, запустіть:
$ chef generate cookbook my-cookbook
Наша структура каталогів тепер буде виглядати так:
.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
Перший крок до налаштування нашого вузла — визначити, які пакети потрібні нашій програмі. Наш вузол вибрано як Ubuntu, тому ми можемо покладатися на менеджер пакетів APT для збору залежностей. Інсталяція пакетів, наданих дистрибутивом ОС, є дуже простим:
apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'
Це майже само собою зрозуміло. Перший рядок оновить репозиторій apt, а наступні рядки встановлять ці пакунки.
Note: The packages following 'nginx' are needed for compiling some of the python dependencies through pip. These may differ based on your python/django project dependencies specified in
requirements.txt
. You can use a trial and error method to determine these packages that you need to include in your cookbook. To do that, perform a manualsudo pip install -r requirements.txt
(Note: This installs packages system wide!) on a freshly instantiated ubuntu machine to see if it runs successfully. If not, the stderr should give you hints on what packages are missing.
Коли ми закінчимо додавати необхідні пакети, нам потрібно створити непривілейованого користувача Linux, який володітиме вихідним кодом програми.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Зауважте, що пароль — це тіньовий хеш-формат, який використовується в Linux. Його можна отримати за допомогою OpenSSL:
$ openssl passwd -1 -salt alilbitof mypassword
Тепер давайте включимо вихідний код програми Django до нашої кулінарної книги. Помістіть вихідний код усередину ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Створення ./my-chef-project/cookbooks/my-cookbook/files/default
каталогу, якщо він не існує.
Інструкція для копіювання цих файлів у віддалене розташування на нашому вузлі описана за допомогою ресурсу remote_directory :
remote_directory '/home/bob/myapp' do
source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
owner 'bob'
group 'users'
mode '0755'
action :create
end
Щоб встановити пакети python у requirements.txt
, ми можемо використовувати ресурс execute для запуску довільної команди. У цьому випадку нам потрібно виконати команду pip install над ним:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
Note: Bear in mind that this is going to execute as the root user and the python libraries will be installed system-wide. If our node is designated to exclusively run this one single python app, then it isn't much of a problem. Despite that, a better option to keep things clean and sane is to find and use a community cookbook that manages python installations or 'virtualenvs'. (or at the very least, write a series of execute blocks to replicate this). Using virtualenvs in python ensures that any python based system tools or other python projects will not be affected
Тепер настав час підготувати HTTP-сервер Gunicorn WSGI з NGINX як зворотним проксі-сервером. Nginx також використовується для обробки всіх статичних активів Django.
Щоб підключити Gunicorn як службу в Ubuntu, можна використовувати Systemd. Systemd_unit ресурс включений в Chef починаючи з версії 12.11.
systemd_unit 'gunicorn.service' do
content({
Unit: {
Description: 'Django on Gunicorn',
After: 'network.target',
},
Service: {
ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
User: 'bob',
Group: 'www-data',
WorkingDirectory: '/home/bob/myapp'
Restart: 'always',
},
Install: {
WantedBy: 'multi-user.target',
}
})
action [:create, :enable, :start]
end
Тепер нам потрібно включити стандартну конфігурацію проксі-сервера NGINX до цього сервера Gunicorn, як показано нижче. Цей фрагмент може входити в ./my-cookbook/templates/nginx.conf.erb
. Створіть каталог шаблонів, якщо він не існує.
Note: Chef's templates support embedded ruby files that can contain variables, ruby expressions and statements. Although this file has the 'erb' extension, we did not use any of the ruby statements or expressions. Also, for the sake of simplicity, we only have a non HTTPS nginx config here (gentle reminder; please do not do this in production!)
server {
listen 80;
server_name http://example.com/;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bob/myapp/myapp/static;
}
location / {
include proxy_params;
proxy_pass http://localhost:8080/;
}
}
Note: There is also an alternative and a better config, where, for instance the Gunicorn server is bound to a unix domain socket instead of a TCP loopback connection. It's worth exploring that for performance reasons.
Щоб скопіювати цю конфігурацію до папки з підтримкою сайтів на вузлі, скористайтеся ресурсом шаблону від Chef.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Активація конфігурацій на nginx зазвичай здійснюється шляхом створення символічного посилання, що вказує на конфігурацію sites-available
в sites-enabled
папці nginx . Посилання на символи можуть бути оголошені в кулінарних книгах шеф-кухарів за допомогою ресурсу посилання, як показано нижче:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
і видалити символічне посилання конфігурації за замовчуванням:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
І нарешті, щоб запустити службу nginx:
service 'nginx' do
action :enable
action :start
end
Списки виконання в chef — це впорядкований список ролей або рецептів у кулінарній книзі, які будуть виконуватися послідовно на вузлі. У нас є одна кулінарна книга "my-cookbook" і "за замовчуванням" рецепт всередині неї, які нам потрібно виконати на вікні Ubuntu, тому runlist.json у нашому каталозі проекту ( ./my-chef-project/runlist.json
) має виглядати так:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Наша кулінарна книга для шеф-кухаря соло готова до подачі. Настав час підготувати машину Ubuntu 18.04 та встановити на ній ChefDK:
$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'
Повертаючись до нашої робочої станції Chef , все, що нам потрібно зробити, це помістити папку кулінарних книг у tar-архів, перенести цей файл разом із runlist.json
віддаленим вузлом, який ми надали вище, і запустити команду chef-solo:
(Наведена нижче команда має виконуватися всередині вузла або «клієнта шефа», а не на робочій станції Chef)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Або ось один рядок (для запуску з ./my-chef-project/
CWD на Chef Workstation):
tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'
Це воно! Подивіться, як стандартний вихід заповнюється діяльністю Chef, яка намагається зблизити ваш вузол із тим, що ви вказали в кулінарних книгах. Chef-solo встановить усі дорогоцінні камені, необхідні для всіх кулінарних книг. Якщо команда chef-solo буде успішною, ми матимемо робочу програму Django, яка працює за nginx на коробці Ubuntu. Перейдіть до домену/IP, щоб перевірити його.
Note: Remember that in django you may need to set this domain/ip in the
ALLOWED_HOSTS
list insettings.py
.
Щоразу, коли ми змінюємо вміст нашого каталогу проекту (рецепти, шаблони або вихідний код програми тощо), просто запустіть наведений вище один рядок із каталогу проекту.
Tip: If the cookbook is version controlled with git (as it should), one good recommendation is to set git hooks to run this one-liner.
Якщо ви уважно подивитеся на останню команду chef-solo, помітите, що ця команда --recipe-url
призначена для отримання URL-адреси. Це означає, що ви можете мати робочий процес, у якому CI буде створювати ваш chef-solo tar-архів, завантажувати його кудись і налаштовувати ваш вузол для періодичного вилучення з нього.
Tip: Use curl to pull the changed tarball periodically as a cronjob.
curl -z $file
will honorIf-Modified-Since
headers and will only download the tar ball if the remote file has been changed since the timestamp on the existing local$file
.
Jenkins — популярний інструмент CI (безперервна інтеграція) з відкритим кодом, який широко використовується для розробки, розгортання та автоматизації проектів. Ця стаття буде
Використання іншої системи? Вступ Постійна інтеграція – це практика розробки програмного забезпечення DevOps, яка дозволяє розробникам часто об’єднувати
Використання іншої системи? Ansible — інструмент з відкритим кодом для автоматизації завдань. Він керує конфігурацією ваших серверів Linux і Windows. Це працює
Використання іншої системи? GoCD — це система безперервної доставки та автоматизації з відкритим вихідним кодом. Він дозволяє моделювати складні робочі процеси, використовуючи його паралельний an
Хоча SaltStack є чудовим інструментом для одночасного виконання операцій на багатьох серверах, він також підтримує певні налаштування конфігурації для кожного хоста, що зберігаються в
Використання іншої системи? Ansible — інструмент з відкритим кодом для автоматизації завдань. Він керує конфігурацією ваших серверів Linux і Windows. Це працює
Вступ Drone — це автоматизована платформа безперервного тестування та доставки, яка працює на вашій власній інфраструктурі. Дрон підтримує будь-яку мову, сервіс о
Що таке Load Balancer Балансувальники навантаження розташовані перед вашою програмою і розподіляють вхідний трафік між кількома екземплярами вашої програми. Fo
Використання іншої системи? Foreman — це безкоштовний інструмент з відкритим вихідним кодом, який допоможе вам налаштувати та керувати фізичними та віртуальними серверами. Предварня
SaltStack, або Salt, — це популярне рішення для керування конфігурацією з відкритим вихідним кодом, яке можна використовувати для реалізації віддаленого виконання, керування конфігурацією, код
Вступ Strider CD — це платформа безперервного розгортання з відкритим вихідним кодом. Програма написана на Node.js і використовує MongoDB як бекенд сховища. Шрок
Вступ Chocolatey забезпечує керування пакетами, що спрощує адміністрування програмного забезпечення та залежностей у Linux у Windows. Можна швидко і легко
Що таке Пакер? Packer — це інструмент створення зображень сервера, розроблений HashiCorp. Обробка зображень сервера; або, як альтернатива, незмінна інфраструктура; є популярною альтернативою
Використання іншої системи? Вступ Постійна інтеграція – це практика розробки програмного забезпечення DevOps, яка дозволяє розробникам часто об’єднувати
Є багато способів автоматизувати процес налаштування та налаштування коробки. З будь-якої причини, якщо вся наша система на даний момент складається з справедливих
Використання іншої системи? Foreman — це безкоштовний інструмент з відкритим вихідним кодом, який допоможе вам налаштувати та керувати фізичними та віртуальними серверами. Предварня
SaltStack — це програма керування конфігурацією на основі Python, яка оптимізована для автоматизації файлів конфігурації, розгортань та всього іншого.
Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.
Ви також стали жертвою DDOS-атак і спантеличені методами запобігання? Прочитайте цю статтю, щоб вирішити свої запитання.
Можливо, ви чули, що хакери заробляють багато грошей, але чи замислювалися ви коли-небудь, як вони заробляють такі гроші? давайте обговоримо.
Ви хочете побачити революційні винаходи Google і як ці винаходи змінили життя кожної людини сьогодні? Тоді читайте в блозі, щоб побачити винаходи Google.
Концепція самокерованих автомобілів, щоб вирушати в дороги за допомогою штучного інтелекту, є мрією, яку ми давно мріємо. Але, незважаючи на кілька обіцянок, їх ніде не видно. Прочитайте цей блог, щоб дізнатися більше…
Оскільки наука розвивається швидкими темпами, бере на себе багато наших зусиль, ризики піддати себе незрозумілій Сингулярності також зростає. Читайте, що може означати для нас сингулярність.
Методи зберігання даних можуть розвиватися з моменту народження Даних. Цей блог висвітлює еволюцію зберігання даних на основі інфографіки.
Прочитайте блог, щоб дізнатися про різні шари архітектури великих даних та їх функціональні можливості найпростішим способом.
У цьому цифровому світі пристрої розумного дому стали важливою частиною життя. Ось кілька дивовижних переваг пристроїв розумного дому щодо того, як вони роблять наше життя гідним життя та спрощують його.
Нещодавно Apple випустила додаткове оновлення macOS Catalina 10.15.4, щоб виправити проблеми, але схоже, що оновлення викликає більше проблем, що призводять до блокування комп’ютерів Mac. Прочитайте цю статтю, щоб дізнатися більше