デプロイを自動化してリリースの安定化が求められる
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を書いていくのはわかった。