Com o Git Plugin do Rundeck você pode utilizar um repositório git para exportar ou importar configurações de jobs. Uma vez instalado e configurado em cada projeto, o plug-in pode ser acionado via interface web ou pela rundeck-cli. Via interface web o plug-in limita-se a exibir uma mensagem de alerta em jobs que foram modificados e estão com commit pendente, deixando que o usuário faça esse commit quando bem entender.
Para evitar jobs modificados que nunca são salvos no git por pendência dos usuários, eu escrevi o script abaixo que percorre todos projetos, realiza os commits pendentes e faz push do repositório local no servidor Rundeck para o endereço externo.
O script depende da rundeck-cli configurada e que o projeto esteja pronto para utilizar o Git Plugin.
#!/usr/bin/env bash
# Export all job configuration to external SCM by <viniciusfs@gmail.com>
RD_CLI=$(which rd)
RD_COLOR=0
for project_name in $(${RD_CLI} projects list | grep -v ^.*# | head -n -1); do
SYNC_STATUS=$(${RD_CLI} projects scm status --integration export --project ${project_name} | grep synchState | awk '{ print $NF }')
if [ "${SYNC_STATUS}" == "EXPORT_NEEDED" ]; then
JOB_LIST=$(${RD_CLI} jobs list --project ${project_name} --outformat "%id" | head -n -1 | xargs echo)
echo "${project_name} - Committing all jobs..."
${RD_CLI} projects scm perform --project ${project_name} \
--integration export \
--action project-commit \
--job ${JOB_LIST} \
--field message="Daily backup, synchronizing all jobs"
echo "${project_name} - Pushing to external SCM..."
${RD_CLI} projects scm perform --project ${project_name} --integration export --action project-push
else
echo "${project_name} - Nothing to do..."
fi
done
Exemplo de utilização. Com o script salvo como rundeck-scm-job-exporter.sh
:
$ export RD_TOKEN=03HnZ8s1lBKVoYaR3XWRZrBCBzeQSFAW
$ export RD_URL=http://localhost:4440
$ ./rundeck-scm-job-exporter.sh
No meu caso eu configurei o próprio Rundeck para executar o script diariamente.