stage: パイプラインを制御するためのもので、job毎に使用できるステージを定義するもの。dependenciesとセットになる同じステージのjobは並行で実行される
artifacts: 成果物のパスを指定。特定のjobから成果物をDLできる。後続のjobで引き継がせることができる。ディレクトリのみ。
image: sample.gitlab.com/vagrant/sample/app
stages:
- test
- build_static
rspec:
stage: test
services:
- mysql:5.7
variables:
MYSQL_DATABASE: sample_test
MYSQL_ROOT_PASSWORD: mysql_strong_password
before_script:
- "echo \"install: --no-document\" > ~/.gemrc"
- "echo \"update: --no-document\" > ~/.gemrc"
- bundle install --jobs=4
- buncle exec rake db:setup RAILS_ENV=test
- buncle exec rake db:migrate RAILS_ENV=test
script:
- bundle exec rspec
artifacts:
paths:
- coverage/
pages:
stage: build_static
dependencies:
- rspec
script:
- my coverage/ public/
artifacts:
paths:
- public
only:
- master
どのようなjobを実行するか設計 -> jobの集合体をstage
commitするとjobが実行される
build, test, docker_build
stages:
- build
- test
- docker_build
# 全ジョブの前処理
before_script:
- chmod +x ./gradlew
- export GRADLE_USER_HOME=`pwd`/.gradlew
# 実行するジョブ
build:
stage: build
image: java:openjdk-8u111-jdk-alpine
script:
- ./gradlew assemble
artifacts:
name: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}"
paths:
- build/libs/*.jar
test:
stage: test
image: java:openjdk-8u111-jdk-alpine
script:
- ./gradlew test sonarqube -PsonarBranch=$CI_COMMIT_REF_NAME -PsonarHostUrl=$SONAR_HOST_UR+
docker_build:
stage: docker_build
image: docker:18.03
script:
- docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" $CI_REGISTRY
- docker build --build-arg JAR_FILE=$(find ./build/libs/ -name "sample*.jar") -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME" ./
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
うーん、なるほど、少しずつって感じやな