デプロイを自動化してリリースの安定化が求められる
Pipelineにてjobを組み合わせ、デプロイをコードによって自動化する機能
Review Appsでアーティファクトの確認
### ステージの定義
.gitlab-ci.yml
job01:
stages:
- build
- test
- deploy
Build_Job01:
stage: build
script:
- "sudo docker run centos:latest echo Build01"
Test_Job1:
stage: test
script:
- "sudo docker run centos:latest echo Test01"
Test_Job2:
stage: test
script:
- "sudo docker run centos:latest echo Test02"
Deploy_Job1:
stage: deploy
script:
- "sudo docker run centos:latest echo Deploy01"
stageのリストに記載した順番に実行される
whenパラメータ: on_success, on_failure, always, manual
### whenパラメータの例
job01:
stages:
- build
- cleanup_build
Build_Job01:
stage: build
script:
- "docker run centos:latest echo BuildProcess"
Cleanup_Build_Job01:
stage: cleanup_build
script:
- "docker rm -f $(sudo docker ps -qa --filter 'status=exited')"
when: on_failure
### dependenciesパラメータの例
job01:
stages:
- build
- test
- deploy
variables:
APP_NAME: 'web_demo'
CONTAINER_NAME: ${CI_PROJECT_NAME}_${APP_NAME}
Build_app01:
stage: build
script:
- cd ./app01
- gradle war
artifacts:
paths:
- app01/build/libs/*.war
Build_app02:
stage: build
script:
- cd ./app02
- gradle war
artifacts:
paths:
- app02/build/libs/*.war
test_app01:
stage: test
script:
- cd ./app01
- gradle test
dependencies:
- build_app01
test_app02:
stage: test
script:
- cd ./app02
- gradle test
dependencies:
- build_app02
deploy:
stage: deploy
script:
- cp app*/build/libs/*.war /usr/local/tomcat/webapps
- systemctl start tomcat.service
build_web_demo:
stage: build
image: gradle:4.4.1-jdk8
script:
- cd ./${APP_NAME}
- gradle war
- gradle test
artifacts:
paths:
- ${APP_NAME}/build/libs/*war
expire_in: 10 min
tags:
- docker
- gitlab-runner01
test_web_demo:
stage: test
variables:
TEST_CONTENT: GitLab
script:
- docker run --name ${CONTAINER_NAME} -d ${APP_NAME}
- sleep 5
- export CONTAINER_ADDRESS='docker inspect -f "{{ .NetworkSettings.IPAddress}}" ${CONTAINER_NAME}'
- wget --post-data="name=${TEST_CONTENT}" http://${CONTAINER_ADDRESS}:8080/${APP_NAME}/hello
- grep ${TEST_CONTENT} ./hello
after_script:
- rm -v ./hello
- docker rm -f ${CONTAINER_NAME} || true
tags:
- shell
- gitlab-runner01
deploy_web_demo:
stage: deploy
variables:
SERVICE_DOMAIN: gitlab-service.example.com
before_script:
- docker rm -f ${CONTAINER_NAME} || true
script:
- docker run --name ${CONTAINER_NAME} -p 80:8080 -d ${APP_NAME}
- sleep 3
- curl http://${SERVICE_DOMAIN}/${APP_NAME}/
tags:
- shell
- production-gitlab-runner01
Dockerfile
FROM tomcat:latest COPY build/libs/*.war /usr/local/tomcat/webapps CMD ["catalina.sh", "run"]
うーむ、build, test, deployを書いていくのはわかった。
