web-dev-qa-db-ja.com

gitlab-ci.ymlで「変数」キーワードを使用するにはどうすればよいですか?

次のGitlab CIドキュメントに記載されているvariables:キーワードを使用しようとしています。

FROM: https://docs.gitlab.com/ce/ci/yaml/README.html

変数

この機能には、バージョンが0.5.0以上のgitlab-runnerが必要です。

GitLab CIを使用すると、ビルド環境で設定される.gitlab-ci.yml変数に追加できます。変数はリポジトリに保存され、機密性のないプロジェクト設定を保存するためのものです。 Rails_ENVまたはDATABASE_URL。

variables:   
  DATABASE_URL: "postgres://postgres@postgres/my_database"

これらの変数は、実行されたすべてのコマンドおよびスクリプトで後で使用できます。

YAMLで定義された変数は、作成されたすべてのサービスコンテナーにも設定されるため、それらを微調整できます。

私がそれを使おうとすると、私のビルドはどの段階も実行せず、とにかく成功とマークされます。これは悪いYAMLの良い兆候です。 gitlab-ci.ymlの内容を設定領域のLINTツールに貼り付けましたが、出力エラーは次のとおりです。

ステータス:構文が正しくありません

エラー:変数job:不明なパラメーターPACKAGE_NAME

ドキュメントと同じYAML構文を使用していますが、機能しません。これに関連する未解決のバグは見つかりません。以下は、現在のバージョンと、gitlab-ci.ymlのサニタイズバージョンです。

Gitlabバージョン:7.13.2 Omnibus

Gitlab Runnerバージョン:0.5.2

gitlab-ci.yml(サニタイズ)

types:
  - test
  - build

variables:
  PACKAGE_NAME: "awesome-Django-app"
  PACKAGE_SUMMARY: "Awesome webapp backend."
  MAJOR_RELEASE: "1"
  MINOR_RELEASE: "0"
  PATCH_LEVEL: "0dev"
  DEV_DB_URL: "db"
  DEV_SERVER: "pydev.example.com"
  PROD_SERVER: "pyprod.example.com"
  TEST_SERVER: "pytest.example.com"

envtest:
  type: test
  script:
  - ". ./testbuild.sh"
  tags:
  - python2.7
  - postgres
  - linux
  except:
  - tags

buildrpm:
  type: build
  script:
  - mkdir -p ~/rpmbuild/SOURCES
  - mkdir -p ~/rpmbuild/SPECS
  - mkdir -p ~/tarbuild/$PACKAGE_NAME-$MAJOR_RELEASE.$MINOR_RELEASE.$PATCH_LEVEL
  - cp $PACKAGE_NAME.spec ~/rpmbuild/SPECS/.
  - cp -r * ~/tarbuild/$PACKAGE_NAME-$MAJOR_RELEASE.$MINOR_RELEASE.$PATCH_LEVEL/.
  - cd ~/tarbuild
  - tar -zcf ~/rpmbuild/SOURCES/$PACKAGE_NAME-$MAJOR_RELEASE.$MINOR_RELEASE.$PATCH_LEVEL.tar.gz *
  - cd ~
  - rm -Rf ~/tarbuild
  - rpmlint -i ~/rpmbuild/SPECS/$PACKAGE_NAME.spec
  - echo $CI_BUILD_ID
  - 'rpmbuild -ba ~/rpmbuild/SPECS/$PACKAGE_NAME.spec \
                    --define="_build_number $CI_BUILD_ID" \
                    --define="_python_version_min 2.7" \
                    --define="_version $MAJOR_RELEASE.$MINOR_RELEASE.$PATCH_LEVEL" \
                    --define="_package_name $PACKAGE_NAME" \
                    --define="_summary $SUMMARY"'
  - scp rpmbuild/RPMS/noarch/$PACKAGE_NAME-$MAJOR_RELEASE.$MINOR_RELEASE.$PATCH_LEVEL-$CI_BUILD_ID.noarch.rpm $DEV_SERVER:~/.
  tags:
  - python2.7
  - postgres
  - linux
  - rpm
  except:
  - tags

質問:

この値を適切に使用するにはどうすればよいですか?

追加情報:

YAMLファイルからこのセクションを削除すると、すべてが機能するため、ファイルの残りの部分は正常に機能します。 (もちろん、未定義の変数はスクリプトエラーにつながります...)

テスト用の変数をPACKAGE_NAMEに減らすだけでも、同じ問題が発生します。

24
Routhinator

元の答えはもはや正しくありません。

元のドキュメントは現在有効ですが、さらに多くの方法があります。変数は、GUI、APIから作成するか、.gitlab-ci.yml 同様に。

https://docs.gitlab.com/ce/ci/variables/README.html

11
Routhinator

ドキュメントに記載されていますが、変数が最新バージョンのgitlab(7.13)に含まれていたとは思いません。 yamlファイルから変数を読み取る機能は、 commit by ayufan 9日前に導入されました。

7.13安定版ブランチのパーサー を見ると、彼の貢献がうまくいかなかったことがわかります。したがって、7.13以前にいると仮定すると、運が悪いのではないかと思います。マスター上にあるため、次のリリースで表示されることはかなり確信しています。それまでは、モンキーパッチ、ソースを直接使用している場合はgit pullを実行するか、次のリリースまでプロジェクト変数に依存することができました。

8
Don Mayo