みんな~!どうやってCIに変数を渡してるの?


CIで自動テストをする際にDBなどの接続情報をどうやって渡してますか?

GitLab-CIはDockerコンテナ上で実行されますよね。ビルドツールにGradleを使っているのでDocker LibraryのGradleイメージを使ってCIを実行しています。もちろんローカルでもテストを実行しますので、ローカルでもGitLab-CI上でも同じようにテストをするために、以下のような環境にしています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
graph LR
  subgraph GitLab
    a["GitLab-CIのシークレット変数"]
    b["CIコンテナ上の~/.gradle/gradle.properties"]
  end
  subgraph PC
    c["~/.gradle/gradle.properties"]
  end
  subgraph Gradleの世界
    d("build.gradle")
    e["datasource.yml"]
  end
  a -- .gitlab-ci.yml --> b
  b --> d
  c --> d
  d --> e

シークレット変数はコンテナの環境変数として展開されるので、それをgradle.propertiesに吐いて、PC上と同じ環境を装う感じです。

.gitlab-ci.ymlは以下のようになっています。

1
2
3
4
5
6
before_script:
  - export GRADLE_USER_HOME=`pwd`/.gradle
  - mkdir -p ${GRADLE_USER_HOME}
  # gradle.propertiesが残ってたらクリア
  - echo -n > ${GRADLE_USER_HOME}/gradle.properties
  - printenv | grep "^MYSECRETS_" >> ${GRADLE_USER_HOME}/gradle.properties

試行錯誤の結果なんですが、みなさんどんな感じでやってるんでしょうかね???