Skip to content

Instantly share code, notes, and snippets.

@tanish-kr
Last active October 3, 2018 07:57
Show Gist options
  • Save tanish-kr/c92d3775ed633cd21bedc73138d5aa6d to your computer and use it in GitHub Desktop.
Save tanish-kr/c92d3775ed633cd21bedc73138d5aa6d to your computer and use it in GitHub Desktop.
Rundeck H2 to MySQL

MySQL Install

$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
$ sudo yum-config-manager --disable mysql80-community
$ sudo yum-config-manager --enable mysql57-community
$ yum info mysql-community-server
$ sudo yum install mysql-community-server -y
$ mysqld --version
$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service
$ systemctl status mysqld.service

5.7以降では、rootのパスワードがtemporaryで発行されてしまいlogを見ないとわからない

grep 'temporary password' /var/log/mysqld.log

セキュリティ設定

$ sudo mysql_secure_installation

Create database

$ mysql -u root
mysql> CREATE DATABASE rundeck;
mysql> grant ALL on rundeck.* to 'rundeckuser'@'localhost' identified by 'rundeckpassword';

Configre Rundeck

  • /etc/rundeck/rundeck-config.properties
dataSource.url = jdbc:mysql://myserver/rundeck?autoReconnect=true&useSSL=false
dataSource.username=rundeckuser
dataSource.password=rundeckpassword
dataSource.driverClassName=com.mysql.jdbc.Driver

Archive Project

  1. Project Name > Project Setting > Export Archive
  2. Choise include type
  3. Export Archive
  4. Download project_*_rdproject.jar

Backup your Rundeck data

RPMの場合

  • /var/rundeck/projects
  • /var/lib/rundeck/data

s3にバックアップを取る

$ aws s3 cp /var/rundeck/projects/ s3://buckets/path/projects --recursive
$ aws s3 cp /var/lib/rundeck/data/ s3://buckets/path/projects --recursive

Restart rundeck

$ sudo systemctl restart rundeckd

Import project

  1. Project Name > Project Setting > Import Archive
  2. Choise download jar file
  3. Choise Impoorted jobs

Clean Logs & execute history

#!/bin/bash -e

function join { local IFS="$1"; shift; echo "$*"; }

# keep last 30 executions for each job
KEEP=30

cd /var/lib/rundeck/logs/rundeck

JOBS=`find . -maxdepth 3 -path "*/job/*" -type d`

for j in $JOBS ; do
  echo "Processing job $j"
  ids=`find $j -iname "*.rdlog" | sed -e "s/.*\/\([0-9]*\)\.rdlog/\1/" | sort -n -r`
  echo $ids
  declare -a JOBIDS=($ids)

  if [ ${#JOBIDS[@]} -gt $KEEP ]; then
    for job in ${JOBIDS[@]:$KEEP};do
      echo " * Deleting job: $job"
      rm -rf $j/logs/$job.*
    done
    job_ids=$(join , ${JOBIDS[@]:$KEEP})
    wf_id=$(join , $(mysql --defaults-extra-file=/etc/rundeck/rundeck_user.cnf rundeck -e "SELECT workflow_id FROM execution WHERE id IN(${job_ids})\G" | awk '/workflow_id/{print $2}'))
    wfs_id=$(join , $(mysql --defaults-extra-file=/etc/rundeck/rundeck_user.cnf rundeck -e "SELECT workflow_step_id wfsid FROM workflow_workflow_step WHERE workflow_commands_id IN(${wf_id}) \G" | awk '/wfsid/{print $2}'))
    mysql --defaults-extra-file=/etc/rundeck/rundeck_user.cnf rundeck -e "DELETE FROM log_file_storage_request WHERE execution_id IN(${job_ids})"
    mysql --defaults-extra-file=/etc/rundeck/rundeck_user.cnf rundeck -e "DELETE FROM referenced_execution WHERE execution_id IN(${job_ids})"
    mysql --defaults-extra-file=/etc/rundeck/rundeck_user.cnf rundeck -e "DELETE FROM execution WHERE id IN(${job_ids})"
    mysql --defaults-extra-file=/etc/rundeck/rundeck_user.cnf rundeck -e "DELETE FROM base_report WHERE jc_exec_id IN(${job_ids})"
    mysql --defaults-extra-file=/etc/rundeck/rundeck_user.cnf rundeck -e "DELETE FROM workflow WHERE id IN(${wf_id})"
    mysql --defaults-extra-file=/etc/rundeck/rundeck_user.cnf rundeck -e "DELETE FROM workflow_workflow_step WHERE workflow_commands_id IN(${wf_id})"
    mysql --defaults-extra-file=/etc/rundeck/rundeck_user.cnf rundeck -e "DELETE FROM workflow_step WHERE id IN ($wfs_id)"
  fi
done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment