Такие дела, поменял я таки работу. И как-то так все теперь интересно и весело, даже начал себя ловить на мыслях, что комп мол как будто первый раз вижу, а не 13+ лет админства за плечами. Но речь не за это. Понадобилось нашей “разработке”, джоба в Jenkins для шифрования “секретов”, ибо светить в пайпе пароли/явки в открытом виде – как-то некошерно.
У нас далеко не все разрабы сидят на Linux/MacOS машинах, многие работают на Win. А на Win Ansible как известно и не пахло. Лазить на серваки неудобно, попросили пайп. Первое что пришло на ум – запилить sh скрипт типа:
echo -n 'some_text_to_encrypt' | ansible-vault encrypt_string --vault-password-file anspass.txt
Естественно объявив допустим переменную ‘vault_text’, сделать параметризированную сборку с запросом собственно самого текста.
Получаем абсолютно работоспособный вариант:
withCredentials([file(credentialsId: 'vault_sbin', variable: 'vault_file')]) { sh "echo -n 'vault_text' | ansible-vault encrypt_string --vault-password-file ${vault_file}" }
Но есть косяк – в лог джобы падает вывод нашей переменной ‘vault_text’, а этот пайп-то собственно и попросили чтоб подобной истории не было 😉
Чуть-чуть покурил, погуглил и понял что все придумано до нас:
https://plugins.jenkins.io/ansible/
Собственно есть полностью удовлетворяющий потребностям плагин AnsibleVault его и берем.
Потом хочется “рюшек” – делаем запрос ввода интерактивным, в итоге получается как-то так:
pipeline { agent { node { label'jenkins-ansible-agent' //Агент Jenkins (обычно достаточно 'any') } } options { skipDefaultCheckout(true) //Пропускаем чекаут ибо не нужен и так быстрее } stages{ stage('Input'){ steps{ script{ env.vault_text = input message: 'Ввести данные которые необходимо зашифровать', //Объявляем переменную которая будет содержать текст который необходимо зашифровать parameters: [string(defaultValue: '', description: '', name: 'vault_text') ] } } } stage('Encrypt'){ steps{ script{ ansibleVault( action:'encrypt_string', content: "${vault_text}", vaultCredentialsId: 'vault_sbin' //Имя сохраненного креда (в данном случае тип 'secret file') ) } } } } }
Вполне себе работает, все довольны, а я себе чутка поднял скилл))