.gitlab-ci.yml ファイルとは.gitlab-ci.yml ファイルとは.gitlab-ci.yml ファイルはパイプラインの構造と順序を定義し、以下のことを決めます。
■ジョブは .gitlab-ci.yml ファイルの最も基本的な要素です。
ジョブの定義及び特徴:
ジョブとは、何をするかを定義するものです。例えば、コードをコンパイルしたり、テストしたりするジョブがあげられます。
使用例:
job1:
  script: "execute-job1"
job2:
  script: "execute-job2"
■stagesは、ジョブを含有するステージを定義するために使用され、パイプラインに対してグローバルに定義されます。
使用例:
stages:
  - build
  - test
  - deploy
needs:キーワードにより、.gitlab-ci.ymlで有効非巡回グラフ(DAG)を実装でき、ジョブの実行順を柔軟にできます。
これにより、いくつかのジョブを他のジョブを待たずに実行することができ、ステージの順番を無視して複数のステージを同時に実行することができます。
使用例:
linux:build:
  stage: build
mac:build:
  stage: build
lint:
  stage: test
  needs: []
linux:rspec:
  stage: test
  needs: ["linux:build"]
linux:rubocop:
  stage: test
  needs: ["linux:build"]
mac:rspec:
  stage: test
  needs: ["mac:build"]
mac:rubocop:
  stage: test
  needs: ["mac:build"]
production:
  stage: deploy
この例では、4つの実行パスを作成します。
GIT_CLEAN_FLAGS変数は、ソースをチェックアウトした後のgit cleanのデフォルトの振る舞いを制御するために使用します。 グローバルに、あるいはジョブごとに設定することができます。variablesセクションで設定できます。
GIT_CLEAN_FLAGSは、このコマンドで指定できるすべてのオプションを受け付けます。 git cleanコマンドのすべてのオプションを受け入れます。
使用例:
以下の「.gitlab-ci.yml」サンプルは[build-job]ジョブにて[mkdir projects]はprojectsのdirectoryを作成しましたが、次の[test-job]を実行される前に、自動的にclean up(Removing projects/)の処理を実行されますので、[build-job]ジョブで作成されたprojectsのdirectoryを削除されます。[test-job]ジョブに環境変数[GIT_CLEAN_FLAGS: -ffdx -e projects/]を指定すれば、[build-job]ジョブにて作成されたproject directory と file が削除しないように実現できます。
.gitlab-ci.yml
stages:											
    - build											
    - test											
											
build-job:											
  stage: build											
  script:											
    - pwd											
    - ls											
    - mkdir projects											
    - cd projects											
    - echo $CI_JOB_NAME											
											
test-job:											
  stage: test											
  variables:											
    GIT_CLEAN_FLAGS: -ffdx -e projects/ 											
  script:											
    - pwd											
    - ls											
    - echo $CI_JOB_NAME											

includeパラメータを使用すると、このジョブが外部YAMLファイルを含むことを許可し、外部のYAMLファイルを含有することができます。これにより、CI/CDの設定を複数のファイルに分解し、長い設定ファイルの可読性を高めることができます。 また、テンプレートファイルを中央のリポジトリに保存し、プロジェクトにその設定ファイルを含めることも可能です。これは、すべてのプロジェクトのグローバルデフォルト変数など、設定の重複を避けるのに役立ちます。
includeは外部のYAMLファイルが拡張子.ymlか.yamlを持っている必要があり、そうでなければ外部ファイルはインクルードされません。
includeは以下のインクルード方法をサポートしています。
| 方法 | 説明 | 
| local | ローカルのプロジェクトリポジトリからファイルをインクルードします。 | 
| file | 別のプロジェクトリポジトリからのファイルをインクルードします。 | 
| remote | リモートURLからのファイルをインクルードします。公開されている必要があります。 | 
| template | GitLabが提供しているテンプレートをインクルードします。 | 
① include:local
include:local は .gitlab-ci.ymlと同じリポジトリのファイルをインクルードします。 ルートディレクトリ(/)からの相対的なフルパスを使用して参照されます。
設定ファイルと同じブランチにある、すでにGitで管理されているファイルしか使えません。つまり、include:localを使う場合は、.gitlab-ci.ymlとローカルファイルの両方が同じブランチにあることを確認してください。
使用例:
include:
  - local: '/templates/.gitlab-ci-template.yml'
② include:file
同じ GitLab インスタンスの下にある別のプライベートプロジェクトのファイルをインクルードするには、include:file を使用します。このファイルは、ルートディレクトリ(/)からの相対的なフルパスを使って参照されます。refも指定できますが、デフォルトはプロジェクトのHEADです。
使用例:
include:
  - project: 'my-group/my-project'
    ref: master
    file: '/templates/.gitlab-ci-template.yml'
③ include:remote
include:remote を使用すると、別の場所からのファイルをインクルードすることができます。 HTTP/HTTPS を使用して、完全な URL を使用して参照されます。リモートURLの認証スキーマはサポートされていないため、リモートファイルは単純なGETリクエストで公開されなければなりません。
使用例:
include:
  - remote: 'https://gitlab.com/awesome-project/raw/master/.gitlab-ci-template.yml'
publicアクセスできない別のproject (GitLab.com のprivate projectsなど) のファイルにアクセスしたい場合は、URL の基本的な認証スキーマも include 値の変数もまだサポートされていないため、本来はアクセスできませんが、しかし、下記の裏技でinclude可能となります。
使用例:
include: 
  - remote: 'https://gitlab.com/api/v4/projects/123456/repository/files/templates%2F.ci-deploy-lib.yml/raw?ref=master&private_token=ABCDEFG&fmt=.yml'
認証スキーマ(Token)は環境変数にすることができないのは残念な点なのですが、上記ようなURLに直接にTokenを埋めるより、publicアクセス権限ないprivate projectのYAMLファイルをincludeすることができます。
④ include:template
include:templateを使うと、GitLabに同梱されている.gitlab-ci.ymlのテンプレートをインクルードすることができます。複数ファイルのinclude:template: もインクルードすることができます。
使用例:
include:
  - template: Android-Fastlane.gitlab-ci.yml
  - template: Auto-DevOps.gitlab-ci.yml