В сценарии вы можете реализовать логику ротации журналов. Выполните всю регистрацию с помощью функции:
log()
{
...
}
Эта функция, во-первых, делает что-то вроде:
printf "%s\n" "$*" >> logfile
затем проверяет размер файла или каким-то образом решает, что файл требует поворота. В этот момент файл logfile.1
, если он существует, удаляется, файл logfile.0
, если он существует, переименовывается в logfile.1
] и файл журнала
переименован в файл журнала.0
.
Решение о вращении может быть основано на счетчике, который хранится в самом скрипте. Когда он достигает 1000, он сбрасывается до нуля.
Если всегда требуется строгое усечение до 1000 строк, сценарий может подсчитать количество строк в файле журнала при запуске и соответствующим образом инициализировать счетчик (или, если счетчик уже соответствует или превышает 1000, выполнить ротацию немедленно ).
Или вы можете получить размер, например, с помощью wc -c logfile
, и выполнить ротацию на основе превышения определенного размера.Таким образом, файл никогда не нужно сканировать для определения состояния.
Ключ hosts необходимо добавить в файл "known_hosts" клиента, в вашем случае пользователя, под учетной записью whos запущен сервер jenkins. Итак, что вам нужно сделать, это:
Тогда все готово. После этого скрипт сможет выполнять scp с пользовательским ключом pubkey.
Я нашел решение проблемы. 1. Я создал новую пару ключей shh под пользователем jenkins. 2. Добавил ключ .pub на удаленный сервер. При выполнении ssh с сервера jenkins используется только что созданный закрытый ключ. Теперь и ssh, и scp работают как часть шага сборки. Спасибо
Короче говоря, вам нужно добавить ssh-ключ пользователя Jenkins на сервер, на котором вы пытаетесь войти, как этот пользователь.
Детали:
Войдите на сервер jenkins, затем:
sudo passwd jenkins
дважды введите пароль, который вы хотите дать пользователю jenkins, затем:
su jenkins
cd
ssh-keygen
Нажмите Enter, чтобы открыть все параметры. Затем скопируйте новые ключи ssh на сервер, который вы хотите скопировать на :
.scp.ssh/id_rsa.pub user@newserver:/home/user/jenkins_key
При появлении запроса нажмите «Да», чтобы продолжить.
Затем войдите на этот сервер как этот пользователь, затем:
ssh user@server
и введите пароль, затем
cd.ssh
ls -lah
если нет "авторизованных _ключей", то:
cd.ssh
touch authorized_keys
Если файл «авторизованных ключей _» игнорируется вышеописанным шагом, тогда:
cd
cat jenkins_key >>.ssh/authorized_keys
rm -rf./jenkins_key
выход/выход с сервера Затем вернитесь на сервер jenkins:
ssh user@newserver
Вы должны войти в систему напрямую без запросов или ввода пароля
Теперь снова запустите задание scp в Jenkins
небезопасный обходной путь заключается в использовании:
scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${sourceFile} ${targetPath}
Это небезопасно, поскольку ключ хоста никогда не проверяется. Это может привести к человеку -в -средних атаках -. Тем не менее трюк, который можно было бы иметь в кармане, чтобы использовать в особых случаях и в изолированных сетях.
Подключаемый модуль агента SSH
Этот подключаемый модуль позволяет предоставлять учетные данные SSH для сборок через агента ssh -в Jenkins.https://plugins.jenkins.io/ssh-agent/
Если вы снова видите эту ошибку, запустите эту команду один раз из задания Jenkins:
ssh -o StrictHostKeyChecking=no user@host hostname
После этого вы можете просто запустить ssh из Jenkins job:
ssh user@host hostname