有了建置 Image 的流程,和前後端分离的机制,接着我们就可以设定 CICD 的流水线来进行服务自动建置和布署。话不多说了直接演示如下,
专案的资料夹结构
code
frontend
backend
流水线设计内容:
variables:
API_HOME: "code/backend"
FRONT_HOME: "code/frontend"
PROJECT_NAME: "Test"
DOCKER_REGISTRY: "hub.docker.com"
DOCKER_WEB_SERVER_BE: "be"
DOCKER_WEB_SERVER_FE: "fe"
.only_fe_rd_template: &only_fe_rd # 前端的一个共用模板
only:
refs:
- deploy # 触发的 branch
changes:
- "code/frontend/**/*" # 触发的目录
except: # 不会触发 CICD 的档案设定
changes:
- "code/frontend/**/*.md"
- "code/frontend/.vscode"
.only_be_rd_template: &only_be_rd # 後端的一个共用模板
only:
refs:
- deploy
changes:
- "code/backend/**/*"
.docker_build_template: &docker_build_rd
image: docker:latest
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
.docker_deploy_template: &docker_deploy_rd
image: kroniak/ssh-client
services:
- docker:dind
before_script:
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
- echo "$DEV_SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
stages:
- rd:docker-build-fe
- rd:docker-build-be
- rd:deploy-fe
- rd:deploy-be
before_script:
- export GRADLE_USER_HOME=`pwd`/$API_HOME/.gradle
# Docker build
front-end-docker-build-rd:
stage: rd:docker-build-fe
<<: *docker_build_rd # 注入模板
script:
- echo "build fe"
<<: *only_fe_rd
tags:
- m4-large # gitlab runner 名称
back-end-docker-build-rd:
stage: rd:docker-build-be
<<: *docker_build_rd
script:
- echo "build be"
<<: *only_be_rd
tags:
- m4-large
## Deploy
ap1-deploy-fe-rd:
stage: rd:deploy-fe
dependencies: # 触发此流水线前要先完成什麽
- front-end-docker-build-rd
<<: *docker_deploy_rd
script:
- touch fe.md
tags:
- m4-large
<<: *only_fe_rd
ap1-deploy-be-rd:
stage: rd:deploy-be
<<: *docker_deploy_rd
dependencies:
- back-end-docker-build-rd
script:
- ssh $DEV_AWS_USER@$DEV_SERVER_IP "docker login -u $REPOSITORY_ACCOUNT -p $REPOSITORY_PASSWORD DOCKER_REGISTRY"
- ssh $DEV_AWS_USER@$DEV_SERVER_IP "touch be.md"
<<: *only_be_rd
tags:
- m4-large
when: manual # 手动触发
~$ mkdir -p gitlab-runner/config
~$ docker run -d --name aiot-runner --restart always -v $(pwd)/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
~$ docker run --rm -it -v $(pwd)/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
Docker 主版 20 以上碰到 DinD 的问题,解决方式如下链结1986 issues
在 EC2 建立一个 SSH Key,
ssh-keygen -m PEM -t rsa -b 4096 -C "Some info..."
将 .pub
档附加至 .ssh/authorized_keys
档案中
再 gitlab 上 setting -> CI/CD -> Variables
设置 SSH private key
和 IP
以进行连线存取。
下面是触发资料夹下的内容,如果有达到流水线 changes
的规则会有以下结果,
这篇想和大家介绍如何将HTML的内容传送到PHP 因为HTML呈现的是网页的画面,若想做些运算或储存...
前言 不论是产各式报表,都与 Excel 脱离不了关系,产 Excel 属於必备技能之一,以下示范如...
Transfer Learning的意思是,假设你现在有一些跟你的task没有直接相关的data,那...
我们常常会在程序里看到 self 这个字,但是他到底是什麽?初心者一定困惑的一个字。 我觉得在 R...
昨天介绍完如何跳页,今天将会分享如何跳页传值。 成品: 刚执行模拟器的样子 按下 Button 後会...