自动化部署
大约 2 分钟
自动化部署
作 者: 邹伟
日 期: 2022-08-30
背景
作为简版CI-CD范例,旨在简化部署流程,降低人为失误,实现自动化部署。
依赖环境
- 基于
gitlab-runner实现服务器自动部署 - 脚本已在
Centos7下进行实测过
升级 &安装git
- 安装依赖
# 常用编译包
yum -y groupinstall "Development Tools"
# 其他依赖包
yum -y install zlib-devel perl-ExtUtils-MakeMaker asciidoc xmlto openssl-devel
- 编译&安装
# 官网下载
wget https://www.kernel.org/pub/software/scm/git/git-2.13.3.tar.gz --no-check-certificate
# 备用下载
wget http://119.28.76.209/files/git-2.13.3.tar.gz
# 解压 &进入
tar -zxvf git-2.13.3.tar.gz & cd git-2.13.3
# 初始化参数
./configure --prefix=/usr/local/git
# 编译安装
make && make install
# 生效git配置
export PATH="/usr/local/git/bin:$PATH"
# 加入到配置文件 /etc/profile
vi /etc/profile
source /etc/profile
配置gitlab-runner
- 下载 &安装
# 从S3下载
curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"
# 从备份下载
curl -L --output /usr/local/bin/gitlab-runner "http://119.28.76.209/files/gitlab-runner-linux-amd64"
# 添加可执行权限
chmod +x /usr/local/bin/gitlab-runner
# 创建runner用户
useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
gitlab-runner start
# 设置自启动
systemctl enable gitlab-runner
systemctl start gitlab-runner
gitlab-runner start|stop
- 注册至git
gitlab-runner register
Enter the GitLab instance URL (for example, https://gitlab.com/):
# 注意为https
https://git.woodare.com/
Enter the registration token:
# 对应git项目的设置runner的token值
YOUR_GIT_RUNNER_TOKEN
Enter a description for the runner:
# 输入当前runner的tag名称
luhe-runner
Enter tags for the runner (comma-separated):
luhe-runner
Registering runner... succeeded runner=vauC9sEG
Enter an executor: custom, docker-ssh, shell, docker+machine, kubernetes, docker, parallels, ssh, virtualbox, docker-ssh+machine:
# 一般情况下,选择shell模式
# 如果设置成功, git上的项目会出现一条luhe-runner的任务
shell
- sudo授权
visudo
# docker示例
gitlab-runner ALL=(ALL) NOPASSWD: /bin/docker
# shell示例
gitlab-runner ALL=(ALL) NOPASSWD: /bin/bash -c /home/gitlab-runner/deploy*.sh
- (可选)Java编译
# 下载Maven
wget http://119.28.76.209/files/apache-maven-3.8.6-bin.tar.gz
# 下载JDK
cat <<EOF >> /etc/profile
> MAVEN_HOME=/opt/apache-maven-3.6.3
> JAVA_HOME=/opt/jdk1.8.0_201
> PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
> export MAVEN_HOME
> export JAVA_HOME
> export PATH="/usr/local/git/bin:$PATH"
> EOF
- (可选)Node编译
# As root 安装
curl -fsSL https://rpm.nodesource.com/setup_12.x | bash -
# No root privileges
curl -fsSL https://rpm.nodesource.com/setup_12.x | sudo bash -
sudo yum install -y nodejs
# 查询源
yarn config get registry
# 更换国内源
yarn config set registry https://registry.npmmirror.com
# 恢复官方源
yarn config set registry https://registry.yarnpkg.com
# 删除注册表
yarn config delete registry
配置gitlab-ci
工程根目录新建
.gitlab-ci.yml, 构建编译与部署脚本配置
- 前端脚手架项目
stages:
- deploy
cache:
paths:
- node_modules/
部署:
stage: deploy
tags:
- luhe-runner
variables:
GIT_STRATEGY: fetch
script:
- echo $PATH
- npm install --registry=https://registry.npmmirror.com
- node -v
- npm -v
- npm run build:prod
- export work_dir=$PWD
- cd ${work_dir}/dist
- tar cvf dist.tar.gz *
- \cp -rf dist.tar.gz /home/gitlab-runner/files/nginx-dist.tar.gz
- sudo /bin/bash -c /home/gitlab-runner/deploy-nginx.sh
when:
manual
- 后端Java项目
stages:
- deploy
############################## CI ##############################
部署:
stage: deploy
tags:
- luhe-runner
variables:
GIT_STRATEGY: fetch
script:
- echo $PATH
- export work_dir=$PWD
- mvn clean package -Dmaven.test.skip=true -f ${PWD}/pom.xml
- \cp -rf ${work_dir}/photovoltaic-admin/target/photovoltaic-admin.jar /home/gitlab-runner/jarfiles/photovoltaic-admin-1.0.0.jar
- sudo /bin/bash -c /home/gitlab-runner/deploy-java.sh
when:
manual
