后端项目
.gitlab-ci.yml
git仓库代码根目录新增文件:.gitlab-ci.yml 配置如下
# 前置脚本
before_script:
# gradlew 添加执行权限
- chmod +x gradlew
# 输出当前目录
- echo $(pwd)
# 定义CI执行的阶段,这里可以自己根据情况定义多少个阶段
stages:
- run
run:
stage: run
only:
# 代码分支
- master
tags:
# gitlab runner 标签
- test-runner
# 运行脚本
script:
# 编译docker镜像并发布到私有仓库Harbor
- ./gradlew bootBuildImage -Dorg.gradle.java.home=/data/jdk-17.0.1
# 部署docker容器
- ssh -tt centos@192.168.10.22 /data/test_project/dev-run.sh
build.gradle
build.gradle 配置
plugins {
id 'org.springframework.boot' version '2.5.7'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:2.5.7'
}
group = 'show.lmm.demo'
version = '0.0.1'
description = 'demoProject'
java.sourceCompatibility = JavaVersion.VERSION_17
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
test {
useJUnitPlatform()
}
bootBuildImage{
//发布到harbor的镜像名称
imageName = "hub.lmm.show/demo/${project.name}:latest"
//是否发布
publish = true
docker {
//中间docker宿主机的地址
host = "tcp://hub.lmm.show:2375"
tlsVerify = false
publishRegistry {
//harbor地址
url = "https://hub.lmm.show/"
//harbor用户名
username = "appdeployment"
//harbor密码
password = "11ccbb2594E304e73"
}
}
}
dev-run.sh
dev-run.sh 配置
#!/bin/sh
projectImage="hub.lmm.show/demo/demoProject"
curDate=`date +%Y%m%d%H%M%S`
servicePath="$(pwd)"
# docker镜像打标签
docker tag "$projectImage:latest" "$projectImage:$curDate"
# 推送docker镜像到hub仓库
docker push "$projectImage:$curDate"
# 删除container
docker rm -f --force `docker ps|grep "$projectImage"|awk '{print $1}'`
# 删除image
docker rmi --force `docker images|grep "$projectImage"|awk '{print $3}'`
# 运行container
docker run -d -p 8080:8080 -v "$servicePath/logs:/workspace/logs" -v "$servicePath/upload:/workspace/upload" -e SPRING_PROFILES_ACTIVE=dev -e TZ="Asia/Shanghai" -e LANG=en_US.UTF-8 "$projectImage:latest"
前端项目
.gitlab-ci.yml
git仓库代码根目录新增文件:.gitlab-ci.yml 配置如下
# 定义CI执行的阶段,这里可以自己根据情况定义多少个阶段
stages:
- run
# 定义全局变量
variables:
CI_REGISTRY_IMAGE: "hub.lmm.show/demo/demoProject:latest"
run:
stage: run
only:
# 代码分组
- dev
tags:
# gitlab runner 标签
- test-runner
before_script:
# 登录docker
- docker login -u "appdeployment" -p "11ccbb2594E304e73" "https://hub.lmm.show/"
# 安装npm依赖
- npm install
# 运行脚本
script:
# 编译前端项目
- npm run build
# 编译docker镜像
- docker build -t $CI_REGISTRY_IMAGE .
# 推送docker镜像到hub私有仓库
- docker push $CI_REGISTRY_IMAGE
# 部署
- ssh centos@192.168.10.22 /data/demoProject-web/dev-run.sh
Dockerfile
Dockerfile配置
FROM nginx
COPY default.conf /etc/nginx/conf.d/default.conf
COPY ./dist /usr/share/nginx/html/
RUN echo 'demoProject-web is running'
default.conf
default.conf配置
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
dev-run.sh
dev-run.sh配置
#!/bin/sh
projectImage="hub.lmm.show/demo/demoProject"
curDate=`date +%Y%m%d%H%M%S`
port=9000
# docker镜像打标签
docker tag "$projectImage:latest" "$projectImage:$curDate"
# 推送docker镜像到hub仓库
docker push "$projectImage:$curDate"
# 删除container
docker rm -f --force `docker ps|grep $port|awk '{print $1}'`
# 删除image
docker rmi --force `docker images|grep "$projectImage" |awk '{print $3}'`
# 运行container
docker run -d -p 9000:80 -e TZ="Asia/Shanghai" -e LANG=en_US.UTF-8 "$projectImage:latest"
说明
ssh免密登录参考:https://www.lmm.show/3/