Rundeck: faça backup da configuração dos jobs em repositório Git

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.