一、安装docker、docker-compose
首先服务器环境为centos7
1、安装docker
yum install docker
2、安装docker-compose
pip install docker-compose
二、使用docker-compose安装gitlab、gitlab-runner
1、创建docker-compose.yml文件
version: "3"
services:
gitlab:
container_name: gitlab
image: gitlab/gitlab-ce
restart: always
ports:
- "8443:443"
- "8880:80"
- "8822:22"
volumes:
- "./srv/config:/etc/gitlab"
- "./srv/logs:/var/log/gitlab"
- "./srv/data:/var/opt/gitlab"
privileged: true
gitlab-runner:
container_name: gitlab-runner
image: gitlab/gitlab-runner
restart: always
volumes:
- "./gitlab-runner/config:/etc/gitlab-runner"
- "/var/run/docker.sock:/var/run/docker.sock"
privileged: true
2、在docker-compose.yml文件同级创建容器挂载目录
3、在docker-compose.yml目录下运行
docker-compose up -d
ps:gitlab镜像比较大需要等待一段时间,加速的话可以使用国内镜像加速
4、使用docker ps 查看是否有两个容器正在运行,
运行成功后在浏览器输入http://your_ip:8880查看gitlab
三、本地创建一个前端项目(create-react-app myapp或其他)并上传到gitlab
上传不做介绍
四、使用gitlab-runner
1、注册gitlab-runner
运行命令:sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register
Please enter the gitlab-ci coordinator URL:
示例:http://gitlab.alibaba-inc.com/ci
Please enter the gitlab-ci token for this runner:
xxxxxx
Please enter the gitlab-ci description for this runner:
示例:qd_api_runner(描述这个runner)
Please enter the gitlab-ci tags for this runner (comma separated):
示例:build(后面要用)
Whether to run untagged builds [true/false]:
true
Please enter the executor: docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine:
docker
Please enter the default Docker image (e.g. ruby:2.1):
node
coordinator URL和token在下图中设置runner的地方复制
2、在gitlab上设置部署服务器的公钥私钥(为了后续 免密传输打包完成的文件)
1)在项目部署服务器上生成.ssh (参考其他教程)
2)在.ssh文件夹的authorized_keys文件中添加生成公钥
3)编辑/etc/ssh/sshd_config文件,将下图三行打开注释没有的话手动添加,重启ssh
4)将生成的公钥和私钥按照下图填写
3、在项目根目录创建.gitlab-ci.yml文件
variables: # 变量,可根据情况定义。gitlab也提供许多预置变量
image: docker.io/node
stages: # 流水线阶段,不同阶段是串行执行,stage下面的jobs却是并行执行
- build
before_script: # 在每个job执行前触发
#创建ssh目录
- mkdir -p ~/.ssh
#读取Settings->CI/CD->Secret variables 添加的公钥变量
- echo "$ID_RSA_PUB" > ~/.ssh/id_rsa.pub
#读取私钥变量,并设置权限为600(必须要600,否则报错)
- echo "$ID_RSA" > ~/.ssh/id_rsa && chmod 0600 ~/.ssh/id_rsa
#收集主机公钥,写入known_hosts,避免出现Are you sure you want to continue connecting (yes/no)?
#注意:ecdsa是针对centos7系统的,如果是centos6 需要使用rsa
#以下命令是将各个环境的主机公钥写入docker容器的~/.ssh/known_hosts文件
- ssh-keyscan -H -t ecdsa -p 部署服务器端口 部署的服务器 >> ~/.ssh/known_hosts
- npm install # 安装依赖包
cache: # 创建node_modules缓存,不用每次都重新安装依赖了
key: ${CI_BUILD_REF_NAME} # gitlab内置变量
paths:
- node_modules/
build:
stage: build
script:
- npm run build
- scp -r ./dist/* 部署的服务器:项目部署的文件
only:
- master # 表示该job只在master分支上执行
allow_failure: false # 表示该job不允许失败,若失败则表示这次CI失败
tags:
- build #这个tag名称就是第一步注册gitlab-runner填写的tag名称
文件中$ID_RSA_PUB和$ID_RSA就是在gitlab中配置的两个变量
五、半自动化部署
前面打包前端文件已经实现自动化,但是打包完成的文件部署还是手动起一个docker的nginx容器
简单学习一下前端的自动化部署,后续再看看其他的前端部署方案,在.gitlab-ci.yml中还可以添加代码规范验证