Архив рубрики: Публикации

Книга: C# для чайников [2019] Мюллер Джон Пол

Книга: C# для чайников [2019] Мюллер Джон Пол

C# для чайников [2019] Мюллер Джон Пол

C# — мощный язык программирования, который стал любимым инструментом программистов, работающих с Visual Studio, и эта книга поможет вам быстро и безболезненно освоить новейшую его версию.
Вы научитесь создавать приложения для Windows, использовать графику, потоки, контейнеры, базы данных и многое другое, узнаете, что такое .NET Framework, полиморфизм, наследование и обобщенное программирование, а также изучите множество других важных и интересных вещей.

Из книги «C# для чайников» вы узнаете не только о типах, конструкциях и операторах языка C#, но и о ключевых концепциях объектно-ориентированного программирования, реализованных в этом языке, который в настоящее время представляет собой один из наиболее приспособленных для создания программ для Windows-инструментов

Если вы в начале большого пути в программирование, смелее покупайте книгу «C# для чайников»: она послужит вам отличным путеводителем, который облегчит ваши первые шаги на этом длинном, но очень увлекательном пути

Из книги «C# для чайников» Вы узнаете, как создать консольное приложение и что такое делегаты, события и интерфейсы. C# — мощный язык программирования, который стал любимым инструментом программистов, работающих с Visual Studio, и эта книга поможет вам быстро и безболезненно освоить новейшую его версию

Вы научитесь создавать приложения для Windows, использовать графику, потоки, контейнеры, базы данных и многое другое, узнаете, что такое .NET Framework, полиморфизм, наследование и обобщенное программирование, а также изучите множество других важных и интересных вещей

В книге «C# для чайников»:

* Создание приложений для Windows
* Циклы и условные переходы
* Синтаксис коллекций
* Интерфейсы и объектно-ориентированные концепции
* Делегаты и события
* Безопасный код
* Работа с разнообразными источниками данных
* Создание приложений для работы в Интернете

Даже если вы никогда не имели дела с программированием, книга «C# для чайников» поможет вам освоить язык C# и научиться писать на нем программы любой сложности. Для читателей, которые уже знакомы с каким-либо языком программирования, процесс изучения C# только упростится, но иметь опыт программирования для чтения книги совершенно необязательно

Джон Пол Мюллер — независимый автор и технический редактор. На сегодняшний день он написал 104 книги и более 600 статей на самые разные темы: от сетей до искусственного интеллекта и от управления базами данных до головокружительного программирования. Некоторые из его текущих работ включают книгу о машинном обучении, пару книг по Python и книгу о MATLAB. Благодаря навыкам технического редактора Джон помог более чем 70 авторам усовершенствовать свои рукописи. Джон всегда интересовался разработкой программного обеспечения и писал о самых разных языках программирования

Скачать с mail облака

2021-08-20T22:44:10Книги и Курсы

Microsoft Surface Go 2 — самый маленький планшетный компьютер 2-в-1

Microsoft снова удивила нас своим самым маленьким съемным планшетным компьютером для бизнеса — Surface Go 2.

Microsoft Surface Go 2 — доступный планшетный компьютер для бизнеса на базе Windows 10 для повседневных задач. Он был анонсирован вместе с   ноутбуком Microsoft Surface Book 3 прошлой весной.

Этот трансформируемый планшет получил 10,5-дюймовый дисплей PixelSense, батарею с увеличенным сроком службы, но при этом оставался очень портативным. Кроме того, дополнительная возможность LTE — это дополнительное преимущество, которое позволяет пользователям оставаться на связи практически в любом месте. Давайте подробнее рассмотрим возможности планшета Microsoft Surface Go 2.

 

Microsoft Surface Go 2: цены и конфигурации

Microsoft предлагает несколько  конфигураций Surface Go 2 по цене от 399,99 до 729,99 долларов. Все модели поддерживают стандарт беспроводной связи 802.11a/b/g/n/ac/ax и технологию Bluetooth Wireless 5.0.

  • Самая дешевая базовая модель Microsoft Surface Go 2 поставляется с процессором Intel Pentium Gold 4425Y, 4 ГБ оперативной памяти и 64 ГБ памяти eMMC.
  • Базу можно настроить на 8 ГБ ОЗУ и 128 ГБ SSD-накопителя при покупке за дополнительные 150 долларов (цена 549,99 долларов).
  • Существует также конфигурация на базе процессора Intel Core M3 Wi-Fi с 8 ГБ оперативной памяти и 128 ГБ SSD.
  • Версия LTE модели M3 стоит 729,99 долларов.

 

Microsoft Surface Go 2: крышка типа Surface и ручка Microsoft Pen

Отметим, что крышка Surface Type Cover продается отдельно. Но добавление крышки клавиатуры в основном превращает этот 10,5-дюймовый планшет в ультрапортативный портативный компьютер. И все благодаря полной версии Windows 10 S Mode. Корпорация Майкрософт предлагает следующие варианты расцветки обучаемых чехлов для клавиатуры: Ice Blue, Poppy Red, Black и Platinum.

Планшет также поддерживает  Surface Pen  и беспроводную мышь Bluetooth.

 

Microsoft Surface Go 2: дизайн и дисплей

Планшет Microsoft Surface Go 2 по дизайну чем-то похож на более мощную   модель Microsoft Surface Pro 7. Он оснащен серебристым магниевым корпусом с зеркальным логотипом Microsoft на задней панели. Однако, будучи 10,5-дюймовой моделью, версия Surface Go 2 заметно меньше и легче, чем ее 12,3-дюймовые аналоги серии Surface Pro. Модель имеет толщину 0,3 дюйма и весит всего 0,57 кг. С другой стороны, Surface Pro 7 весит 0,77 кг. Конечно, он также имеет лучшее оборудование.

Что касается дисплея, то это сенсорный экран PixelSense с разрешением 1920 x1280 FHD. Эта версия также имеет немного более высокую плотность пикселей — 220 пикселей на дюйм и соотношение сторон 3:2. И хотя это стандартно для режима планшета, вы заметите это при использовании Surface Go 2 в качестве замены ноутбука. Например, в широкоэкранном формате видео вы увидите черные полосы над и под отснятым материалом.

Microsoft Surface Go 2 - самый маленький планшетный компьютер 2-в-1

 

Microsoft Surface Go 2: камеры, порты и аудио

Как и все планшеты и кабриолеты Surface, Surface Go 2 оснащен HD-камерами на передней и задней панели. Фронтальная камера с разрешением 5,0 МП 1080p поддерживает функцию аутентификации Windows Hello Face и в основном используется для звонков по телефону и видеоконференций. На задней панели также есть разрешение 1080p HD и автофокус на 8,0 МП, что отлично подходит для фото- и видеосъемки.

Surface Pro Go 2 оснащен удивительным количеством портов для такого небольшого устройства. У вас есть порт USB-C, комбинированный разъем для наушников и разъем Surface на правой стороне. На левой стороне вы найдете устройство для чтения карт памяти microSD, кнопку питания и ручки регулировки громкости.

Также стоит упомянуть, что в планшете установлены стереодинамики Dolby Audio Premium мощностью 2 Вт, обеспечивающие приличное качество звука. Так что прослушивание музыки, подкастов, аудиокниг и потоковых передач на этом планшете может быть весьма приятным. Но если вы ищете более глубокий звук и большую громкость, неизбежно приобретение пары качественных внешних динамиков или наушников.

 

Общая производительность Microsoft Surface Go 2

Обратите внимание, что Microsoft Surface Go 2 ни в коем случае не является мощным устройством. И хотя планшет поддерживает все приложения для Windows, он предназначен для решения основных повседневных задач. С помощью Surface Go 2 вы можете делать заметки, записывать идеи, делать наброски, проверять электронную почту и многое другое. Вы даже можете делать презентации с помощью Microsoft Pen. Самое приятное то, что планшет обеспечивает непрерывное использование в течение 10 часов без необходимости подзарядки. Кроме того, в промежутках между ними вы можете играть в бесплатные игры для Windows.

Кроме того, вы можете выбирать, как использовать свое программное обеспечение. Например, работа в режиме S дает вам доступ к широкому спектру приложений из Microsoft Store.

 

Заключительные слова

Microsoft Surface Go 2 может пригодиться в дороге. Он служит одновременно планшетом и ноутбуком благодаря дополнительной съемной крышке клавиатуры. Surface Go 2 позволяет транслировать любимые шоу, делать заметки и многое другое, что делает его идеальным маленьким попутчиком. Самое приятное то, что планшет практически умещается в кармане. К сожалению, Microsoft не включает Surface Pen и Type Cover в эту модель, что вынуждает пользователей тратить дополнительные средства на эти важные аксессуары. Но, учитывая возможности планшета по такой умеренной цене, мы думаем, что тратить деньги на клавиатуру того стоит.



2021-08-20T19:12:41
Microsoft

Книга: Язык Go Для Начинающих

Книга: Язык Go  Для Начинающих

Книга: Язык Go Для Начинающих. Привет, меня зовут Максим. Сейчас ты будешь читать мою книгу, которая поможет тебе начать разрабатывать современные приложения на языке программирования Go.

С этим языком я активно работаю последних 2.5 года. За это время я успел применить его на практике в проектах различной сложности, как личных так и на работе и фрилансе. Чем больше я разрабатываю на этом языке, тем больше я влюбляюсь в его простоту, производительность и мощность.

Язык я начал изучать в полевых условиях, так как мне нужно было буквально за 1-2 дня сделать тестовое задание на Go при приеме на новую работу. Тогда было совсем мало хорошего материала по этому языку, особенно в рунете. Недавно я решил заново повторить основы и заполнить пробелы в фундаментальных
знаниях Go. Тут мне пришла идея структурировать все знания и опыт для ребят, которые только начинают свой путь с этим языком.

Надеюсь, эта книга будет тебе полезной и послужит хорошим стартом в мир back-end
разработки на этом замечательном языке.

Скачать с mail облака

2021-08-20T08:26:54Книги и Курсы

Создание Jenkins backup/restore в Unix/Linux

Я рассказывал в своих заметках о установке, настройке, масштабировании и о джобах в Jenkins-е. В голову пришло еще то, что нужно еще и иметь бэкапы для того, чтобы можно было откатится назад. Я нагуглил пару решений. Но еще не решил какое лучше. По этому, расскажу о них.




Полезное чтиво:




Установка Jenkins в Unix/Linux




Работа с Jenkins-CLI в Unix/Linux




Установка Jenkins и Jenkins-slave в Unix/Linux




Настройка языка в Jenkins




Создание Jenkins backup/restore в Unix/Linux




И так, нам понадобится установить плагин(ы) (можно и один на выбор, я использовал несколько для сравнения):




  • Thin backup
  • Backup Plugin
  • Periodic Backup
  • SCM Sync configuration




Можно заюзать и другие решения:




  • Использовать Git и взять «$JENKINS_HOME» под него.
  • Написать BASH скрипт и создать джобу на ее выполнение.




Перейдем к решениям!




Использование Thin backup плагина для backup/restore Jenkins-а в Unix/Linux




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «Thin backup». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало.




PS: Для перезагрузки дженкинс-сервера, я использую «Restart Safely» плагин.




Настройки бекапа, переходим в «Manage Jenkins» -> «ThinBackup»:




Плагин ThinBackup для Jenkins-а




В данном плагине имеются:




  • Backup Now — Кнопка чтобы сделать бекап сейчас.
  • Restore — Служит для рестора данных.
  • Settings — Настройка для бэкапа.




Начнем с настройки, нажимаем по нему:




Настройка thinBackup плагина для бэкапа дженкинса




Я отметил нужные мне поля и нажал на кнопку «Save». Т. е у меня будут выполнятся бэкапы по заданному расписанию и складыватся в «/backups» папку. Теперь можно запустить «Backup now» чтобы выполнился бэкап.




Вот и все. Можно юзать данный плагин для бэкаа и рестора.




Использование Backup Plugin плагина для backup/restore Jenkins-а в Unix/Linux




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «Backup plugin». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало.




Настройки бекапа, переходим в «Manage Jenkins» -> «Backup manager»:







В данном плагине имеются:




  • Setup — Служит для настройки бэкапов.
  • Backup Hudson configuration — Чтобы создать бэкап.
  • Restore Hudson configuration — Для рестора бэкапа.




Я привел настройку к такому виду:







После настроек нажимаем на «Save». Нажимаем на «Backup Hudson configuration» для создания бэкапа.




Использование Periodic Backup плагина для backup/restore Jenkins-а в Unix/Linux




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «Periodic Backup». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало.




Настройки бекапа, переходим в «Manage Jenkins» -> «Periodic Backup Manager»:




Меню Periodic Backup plugin




Плагин не сконфигурирован и его нужно отконфигурить. Что я и сделаю сейчас, нажимаем на «Configure»:




Настройка Periodic Backup plugin




Вот и все. Можно выполнить бэкап! Данный плагин понравился больше чем другие!




Использование SCM Sync configuration плагина для backup/restore Jenkins-а в Unix/Linux




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «SCM Sync configuration». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало.




Создам проект в гитлабе, например «configurations/jenkins».В данной проекте я буду хранить все настройки.




Переходим в «Manage Jenkins» -> «Configure System» и находим поле «SCM» и заполняем поля. У меня не получилось подружится с этим плагином вообще. Снес его!




Использование bash-скрипта для backup/restore Jenkins-а в Unix/Linux




Можно написать скрипты на любой вкус, используя bash. Есть плагин для запуска скриптов через джобу. Сейчас поставим данный плагин.




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «Exclusive Execution». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало. Создам структуру: Projects->Configurations. Т.е папка Projects в ней будут проекты, в данном случае «Configurations» — конфиги (Для создания папки, нажмите «New item» и выбирете «folder»).




Переходим в проект и нажимаем на «New item» и кликаем по «Freestyle project». Вводим имя для проекта, у меня — «jenkins-backup» и нажимаем на «OK»:




Freestyle project для Jenkins бекапа




Потом переходим в созданный проект и нажимаем на «Configure» и находим поле «Source Code Management» и прописываем УРЛ где будет лежать скрипт для бэкапа у меня это готовое решение какого-то чела, например:




настройка SCM




Идем дальше и переходим во «Build Triggers» вкладку и заполним:







Т.е заполним переодичность с которой будет запускаться скрипт.sh1 lines




H 3 * * *




После этого переходим во «Build» вкладку и затем, из списка выбираем «Execute shell». и прописываем параметры для запуска:




Настройка запуска скрипта с параметрами через Build-execute shell




Добавляем в поле следующий текст:sh1 lines




./jenkins-backup.sh $JENKINS_HOME /backups/backup_`date +"%Y_%m_%d_%H:%M:%S"`.tar.gz




И на этом все, нажимаем на «Save». После этого, будет выполнятся бекап по заданному времени. Если есть необходимость, то можно запустить джобу маннуалли (Нажав на «Build Now»).




PS: Можно сделать бэкап-ротейт чтобы все старые бэкапы удалялись автоматом, например, можно добавить еще один «Execute shell» команду:sh1 lines




find /backups/backup_* -mtime +7 -delete




Т.е бэкапы будут хранится 7 дней, остальные будут удалены.




Вот еще один пример скрипта, который можно использовать:sh42 lines




#!/bin/bash

# Setup
#
# - Create a new Jenkins Job
# - Mark "None" for Source Control Management
# - Select the "Build Periodically" build trigger
#   - configure to run as frequently as you like
# - Add a new "Execute Shell" build step
#   - Paste the contents of this file as the command
# - Save
#  
# NOTE: before this job will work, you'll need to manually navigate to the $JENKINS_HOME directory 
# and do the initial set up of the git repository.  
# Make sure the appropriate remote is added and the default remote/branch set up.
#  

# Jenkins Configuraitons Directory
cd $JENKINS_HOME

# Add general configurations, job configurations, and user content
git add -- *.xml jobs/*/*.xml userContent/*

# only add user configurations if they exist
if [ -d users ]; then
    user_configs=`ls users/*/config.xml`

    if [ -n "$user_configs" ]; then
        git add $user_configs
    fi
fi

# mark as deleted anything that's been, well, deleted
to_remove=`git status | grep "deleted" | awk '{print $3}'`

if [ -n "$to_remove" ]; then
    git rm --ignore-unmatch $to_remove
fi

git commit -m "Automated Jenkins commit"

git push -q -u origin master




Как по мне, все тут логично и понятно что он делаеет… Аналогичным способом можно сделать джобу и запускать переодически. Тем самым, все конфиг-файлы, будут попадать в гит.




Вывод: Я протестировал несколько плагинов и выбрал — использовать скрипты или Thin backup, Periodic Backup плагины. Но если есть другие решения, — пишите, дополню материал.




Я для клиента писал вот такой скрипт:sh38 lines




#!/usr/bin/env bash


# JENKINS_HOME
#  +- config.xml     (jenkins root configuration)
#  +- *.xml          (other site-wide configuration files)
#  +- userContent    (files in this directory will be served under your http://server/userContent/)
#  +- fingerprints   (stores fingerprint records)
#  +- nodes          (slave configurations)
#  +- plugins        (stores plugins)
#  +- secrets        (secretes needed when migrating credentials to other servers)
#  +- workspace (working directory for the version control system)
#      +- [JOBNAME] (sub directory for each job)
#  +- jobs
#      +- [JOBNAME]      (sub directory for each job)
#          +- config.xml     (job configuration file)
#          +- latest         (symbolic link to the last successful build)
#          +- builds
#              +- [BUILD_ID]     (for each build)
#                  +- build.xml      (build result summary)
#                  +- log            (log file)
#                  +- changelog.xml  (change log)

echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
echo "==================== Jenkins backup ====================";
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";

JENKINS_DIR="/mnt/data/jenkins"
JENKINS_BACKUP_DIR="/mnt/data/jenkins_backup"

cp -r ${JENKINS_DIR}/*.xml ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/userContent ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/fingerprints ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/nodes ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/plugins ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/secrets ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/workspace ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/jobs ${JENKINS_BACKUP_DIR}




Проверялось, — работает!











Резервное копирование для Jenkins




Все, кто занимается задачами CI/CD, так или иначе знают про Jenkins, даже если им посчастливилось не иметь с ним дела.




Этот непотопляемый кадавр продолжает жить и процветать по следующим причинам:




  • гибкость настроек (от настраиваемых диалоговых окон до встроенного Groovy);
  • архитектура с поддержкой плагинов и обширный набор готовых плагинов на все случаи жизни;
  • и самое главное — большой накопленный объём пользовательских проектов, которые проще продолжать развивать и поддерживать в среде Дженкинса, чем пытаться мигрировать на более современные и приятные платформы.




Очевидно, что чем важнее данные внутри Дженкинса для тех, кто им пользуется, тем актуальнее для них резервное копирование этих данных.




Однако здесь возникают два небольших препятствия:




  • настройки, временные данные и файлы проектов смешаны внутри рабочего каталога в одну кучу;
  • штатного механизма не существует, вместо него есть энное число посторонних костылей, распространяемых в виде плагинов, описаний и копипаст.




Поэтому, взяв за основу один из таких костылей, мы написали свой собственный.




Список предварительных пожеланий к нему был примерно таким:




  • резервная копия должна иметь минимальный размер и максимальную скорость создания (например, дамп виртуальной машины или снимок ZFS с сотнями гигабайт проектов не годится);
  • после восстановления нам достаточно иметь полностью настроенный сервер без предыдущего состояния — который знает, как выполнять новые job’ы, но ничего не помнящий про старые;
  • поскольку настройки имеют текстовый вид, пусть они сохраняются в Git-репозиторий;
  • если Jenkins предназначен для автоматического выполнения заданий, пусть самостоятельно выполняет всю работу по своему обслуживанию.




Общая схема:




  • в $JENKINS_HOME создаётся Git-репозиторий;
  • на Git-сервере для него создаётся origin (далее приводятся настройки для Gitlab);
  • в Дженкинсе создаётся периодическое задание, которое сохраняет в Git ключевые файлы;
  • для уменьшения размера от плагинов сохраняются только манифесты, при восстановлении плагины скачиваются заново.




Сначала создайте пользователя и репозиторий в Gitlab’e:




  • пользователь = jenkins-backup-robot;
  • репозиторий = jenkins-configs;
  • URL репозитория скопируйте в буфер обмена;
  • откройте Repository => Settings => Members;
  • назначьте jenkins-backup-robot мантейнером (иначе Gitlab не даст сделать ему первый push в пустой репозиторий).




Теперь идите в командную строку сервера, на котором работает Jenkins:




  • нам требуется создать SSH-ключ и Git-репозиторий:




sudo -Hiu jenkins

cd ~

git init

git config --global user.name Jenkins

git config --global user.email "jenkins@$(hostname -f)"

git remote add origin ВСТАВЬТЕ_ЗДЕСЬ_URL_GIT_РЕПОЗИТОРИЯ

test -s ~/.ssh/id_rsa.pub || ssh-keygen

cat ~/.ssh/id_rsa.pub




Созданный SSH-ключ надо импортировать в Gitlab:




  • Это делается в разделе Admin => Users => jenkins-backup-robot => Impersonate => Personal Settings => SSH keys.




Создайте в Дженкинсе новое задание:




  • Name: Backup Jenkins configs to Git
  • Type: Free job
  • Label: master
  • SCM: None
  • Build: Build Periodically
  • Schedule: 20 04 * * *
  • Build step: Execute Shell
  • Command:




#!/bin/sh -e



cd "$JENKINS_HOME"



# Add general configurations, secrets, job configurations, nodes, user content, users and plugins info:

ls -1d *.xml secrets/ jobs/*/*.xml nodes/*/*.xml userContent/* users/*/config.xml 

    plugins/*/META-INF/MANIFEST.MF 2>/dev/null | grep -v '^queue.xml$' | xargs -r -d 'n' git add --



# Track deleted files:

LANG=C git status | awk '$1 == "deleted:" { print $2; }' | xargs -r git rm --ignore-unmatch



LANG=C git status | grep -q '^nothing to commit' || {

    git commit -m "Automated Jenkins commit at $(date '+%Y-%m-%d %H:%M')"

    git push -q -u origin master

}




  • SAVE




Пояснения:




  • Метка “master” нужна, если у Дженкинса есть slave-узлы. Если их нет, метку в задании можете не указывать. Если они есть, то в списке узлов отредактируйте свойства мастера и в поле “Labels” добавьте “master”. Если вы этого не сделаете, Дженкинс попытается выполнять задание через агентов на всех узлах, а это явно не то, что нам требуется.
  • Если для подключения к Git-серверу используется SSH, перед выполнением задания не забудьте подключиться к нему вручную, чтобы git push не завершался с ошибкой из-за StrictHostKeyChecking.




Заключительный шаг в Gitlab’e после успешного git push:




  • в свойствах репозитория откройте раздел Members и понизьте уровень доступа для Дженкинса с Maintainer до Developer;
  • в Settings => Repository => Protected branches поменяйте для ветки “master” разрешение “Allow to push” с Maintainers на Maintainers+Developers.




Восстановление плагинов:




  • Т.к. мы сохраняем только манифесты плагинов, после восстановления из резервной копии нам потребуется просканировать каталог с манифестами и составить список команд для загрузки дистрибутивов:




sudo -Hiu jenkins

cd ~/plugins/

gawk 'BEGIN     { RS = "rn" }

      BEGINFILE { n = v = "" }

      ENDFILE   { printf "curl -sS -L -O http://updates.jenkins-ci.org/download/plugins/%s/%s/%s.hpin", n, v, n }

      $1 == "Short-Name:"     { n = $2 }

      $1 == "Plugin-Version:" { v = $2 }

    ' ./*/META-INF/MANIFEST.MF > ./download_all_plugins.sh




  • Обратите внимание, что вместо awk используется gawk (GNU awk), т.к. классический awk не понимает BEGINFILE и ENDFILE. В некоторых дистрибутивах gawk устанавливается по умолчанию, в некоторых его потребуется установить вручную.
  • Если gawk отработает без ошибок, запустите сгенерированный им файл:




sudo -Hiu jenkins

cd ~/plugins/

gawk 'BEGIN     { RS = "rn" }

      BEGINFILE { n = v = "" }

      ENDFILE   { printf "curl -sS -L -O http://updates.jenkins-ci.org/download/plugins/%s/%s/%s.hpin", n, v, n }

      $1 == "Short-Name:"     { n = $2 }

      $1 == "Plugin-Version:" { v = $2 }

    ' ./*/META-INF/MANIFEST.MF > ./download_all_plugins.sh




  • Самостоятельно распаковывать и устанавливать скачанные hpi-файлы не требуется — перезапустите Дженкинс и он сделает это сам.




Источники: https://linux-notes.org/sozdanie-jenkins-backup-restore-v-unix-linux/ и https://cdnnow.ru/blog/jenkins-backup/



2021-08-19T10:17:29
Software

Многоступенчатая сборка Docker-образов / Multi-Stage Docker Builds

multistage docker container

Это особенно актуально для приложений, разработка которых ведется на компилируемых языках программирования. Используя эту возможность, вы сможете существенно сокращать размер вашего итогового образа не, прибегая к хитрым трюкам, которые я описывал в статье «6 советов по уменьшению Docker образа» Суть подхода заключается в том, чтобы не заботиться о количестве получающихся слоев в процессе сборки вашего приложения и копировать результаты сборки из одного образа в другой. В этой статье я покажу, как это реализуется на практике. Выдумывать ничего не буду, а просто покажу вам это на уже готовых примерах из официальной документации. Читать

Настройка сети в Ubuntu 18.04 | 20.04 | 21.04

В этой статье разберем настройку сети в Ubuntu 18.04|20.04|21.04. Настройку будем производить через утилиту netplan.




Не забываем о синтаксисе данного файла. !!! Табуляция не используется и количество пробелов должно быть одинаково для одноименных категорий !!!






Сперва давайте определим какие интерфейсы у нас присутствуют в системе:




ip a




или




ifconfig -a




  • необходимо установить утилиту net-tools




Вывод команды покажет все имеющиеся в системе сетевые интерфейсы. Вот пример вывода:




enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 14:d6:4d:56:b8:5a  txqueuelen 1000  (Ethernet)
        RX packets 2087766  bytes 2768743733 (2.7 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1996135  bytes 201457120 (201.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 10:78:d2:76:39:b3  txqueuelen 1000  (Ethernet)
        RX packets 10585  bytes 2371990 (2.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16067  bytes 18280327 (18.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
enp0s9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 10:78:d2:76:39:b3  txqueuelen 1000  (Ethernet)
        RX packets 87766  bytes 68743733 (12.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13819  bytes 12743733 (12.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 242  bytes 35780 (35.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 242  bytes 35780 (35.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0




Настройки локальной сети. Динамический IP-адрес (DHCP)




Отредактируйте файл конфигурации netplan который находится в директории /etc/netplan/. При открытии он должен выглядеть примерно так:




network:
  renderer: networkd
  ethernets:
     enp0s3:
         dhcp4: true
         dhcp6: true
  version: 2




тут интерфейс enp0s3 настроен на автоматическое получение IP-адреса от DHCP сервера.




Настройки локальной сети. Статический IP-адрес.




Для локальной сети в которой используются статические ip-адреса подойдет следующая конфигурация:




network:
  renderer: networkd
  ethernets:
     enp0s3:
         addresses:
         - 10.5.5.10/24
         gateway4: 10.5.5.1
         nameservers: 
            addresses: [10.5.5.1, 8.8.4.4]
            search: [dom, mydomain]
         optional: true
  version: 2




Настройки беспроводной сети. Динамический IP-адрес.




Для корректной работы беспроводного интерфейса вам потребуется установить утилиту WPA supplicant, которая позволяет подключиться к точкам доступа с WPA и WPA2:




sudo apt install wpasupplicant




Добавьте новый файл конфигурации в каталог /etc/netplan/:




sudo nano /etc/netplan/02-wifi.yaml




Отредактируйте файл конфигурации беспроводной сети с динамическим ip-адресом (DHCP):




network:
  version: 2
  renderer: networkd
  wifis:
    wlp3s0:
      dhcp4: yes
      dhcp6: no
      access-points:
        "network_ssid_name":
          password: "**********"




Настройки беспроводной сети. Статический IP-адрес.




Для беспроводной сети в которой используются статические ip-адреса подойдет следующая конфигурация:




network:
  version: 2
  renderer: networkd
  wifis:
    wlp3s0:
      dhcp4: no
      dhcp6: no
      addresses: [10.5.5.10/24]
      gateway4: 10.5.5.1
      nameservers:
        addresses: [10.5.5.1, 8.8.4.4]
      access-points:
        "network_ssid_name":
          password: "**********"




Применение конфигураций




Используйте netplan для генерации необходимой конфигурации:




sudo netplan generate




Для подробного вывода информации при генерации, используйте опцию –debug:




sudo netplan --debug generate




Далее сохраняем изменения:




sudo netplan try




Пример конфигурации локальной сети с метриками




network:
  version: 2
  renderer: networkd
  ethernets:
    id0:
      match:
        macaddress: 00:11:22:33:44:55
      wakeonlan: true
      dhcp4: true
      addresses:
        - 192.168.14.2/24
        - 192.168.14.3/24
        - "2001:1::1/64"
      gateway4: 192.168.14.1
      gateway6: "2001:1::2"
      nameservers:
        search: [foo.local, bar.local]
        addresses: [8.8.8.8]
      routes:
        - to: 0.0.0.0/0
          via: 11.0.0.1
          table: 70
          on-link: true
          metric: 3
      routing-policy:
        - to: 10.0.0.0/8
          from: 192.168.14.2/24
          table: 70
          priority: 100
        - to: 20.0.0.0/8
          from: 192.168.14.3/24
          table: 70
          priority: 50
    lom:
      match:
        driver: ixgbe
      set-name: lom1
      dhcp6: true
    switchports:
      match:
        name: enp2*
      mtu: 1280
  wifis:
    all-wlans:
      match: {}
      access-points:
        "Joe's home":
          password: "s3kr1t"
    wlp1s0:
      access-points:
        "guest":
           mode: ap
  bridges:
    br0:
      interfaces: [wlp1s0, switchports]
      dhcp4: true




Вот ещё пример




network:  
  version: 2  
  ethernets:    
    enp0s3:      
      dhcp4: true      
      match:        
        macaddress: 02:70:4e:c8:68:e9    
    enp0s8:      
      dhcp4: false      
      addresses: [192.168.33.10/24]      
      routes:        
        - to: 0.0.0.0/0          
          via: 192.168.33.1          
          metric: 50



[endtxt]




RSS



Добавление RSS-ленты на главную страницу этого сайта не поддерживается, так как это может привести к зацикливанию, замедляющему работу вашего сайта. Попробуйте использовать другой блок, например блок Последние записи, для отображения записей сайта.


2021-08-18T19:33:58
Network