В моем текущем проекте мы настраивали новый сервер сборки. Одна из вещей, которую мы должны были сделать, — переместить старую реализацию сонара, работающую поверх H2, в новую версию, работающую на Oracle. Проблема заключалась в том, что просто перенести данные практически невозможно, когда вы начинаете с H2, и когда версии были так далеко друг от друга, как в нашем случае. В ходе некоторых исследований мы наткнулись на следующую страницу Gist миграции, показывающую возможный путь миграции: https://gist.github.com/aslakknutsen/2422117
Пример сценария на этой странице заключается в том, что он извлекает все теги из репозитория Git и просто запускает maven и плагин сонара для пополнения нового сонара. С помощью нескольких дополнений и изменений нам удалось запустить его для нашего сценария и мы смогли пополнить наш новый гидролокатор историческими данными:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# Based on: https: //gist.github.com/aslakknutsen/2422117 GIT_REPO=$ 1 START_TAG=$ 2 MVN_COMMAND= "mvn clean install -fn" SONAR_COMMAND= "mvn org.codehaus.sonar:sonar-maven3-plugin:3.7:sonar" if [ -z "$GIT_REPO" ]; then echo "Missing program argument: repository" echo "Usage: ./sonar_history.sh git_repository_path [start-tag]" exit fi pushd $GIT_REPO # set these for partial imports done= 0 skip= 0 toProcess= 100 for tag in `git for -each-ref --format= "%(taggerdate): %(refname)" --sort=taggerdate | grep -iv ^: | cut -d " " -f 7 | cut -c 11 - | grep -i <release-prefix>` do echo $tag if [ $((done - skip)) -eq "$toProcess" ]; then break fi if [[ -n "$START_TAG" && "$START_TAG" > "$tag" ]] ; then echo "Skipping $tag (start tag $START_TAG)" continue fi if [ "$done" -ge "$skip" ]; then TAG_DATE=`git show $tag --date=iso | grep Date: -m1 | cut -d ' ' -f 4 ` echo "Checking out source from $TAG_DATE tagged as $tag" # we force a complete cleanup each time git fetch --all git reset --hard origin/master git checkout -f $tag git clean -df SONAR_PROJECT_COMMAND= "$SONAR_COMMAND -Dsonar.projectDate=$TAG_DATE -Dsonar.jdbc.url=jdbc:oracle:thin:@<host>:1521:DBELBLD -Dsonar.jdbc.username=<username> -Dsonar.jdbc.password=<password>" echo "Executing Maven: $MVN_COMMAND" $MVN_COMMAND # not all files have the correct version set, which messes up the push to sonar # replace the version with the release property for correct processing sed -i -- "s/<version>00_00_00-SNAPSHOT<\/version>/<version>$tag<\/version>/g" pom.xml echo "Executing Sonar: $SONAR_PROJECT_COMMAND" $SONAR_PROJECT_COMMAND fi done=$((done+ 1 )) done popd |
Приведенный выше код был запущен с SonarQube 4.5.2, но также должен работать с SonarQube 5.x.
Ссылка: | Перенесите данные сонара из старой версии в новую версию сонара от нашего партнера JCG Йоса Дирксена в блоге Smart Java . |