从零开始的gitlab-cicd环境搭建
#从零开始的gitlab-cicd搭建gitlab的搭建这两个搭建有两种方式,一种是docker的搭建方式(这种相对比较简单),一种是安装host主机上(配置可能稍微繁琐了些),这里只讲docker的方式:一、docker拉取gitlab镜像首先我们可以使用ssh工具连到linux(ubuntu)服务器中,先安装好docker环境,具体安装docker的如下:1.安装步骤如下:1.1、更新源apt
从零开始的gitlab-cicd环境搭建
一、gitlab的搭建
这两个搭建有两种方式,一种是docker的搭建方式(这种相对比较简单),一种是安装宿主机上(配置可能稍微繁琐了些),这里只讲docker的方式:
1、docker的安装
首先我们可以使用ssh工具连到linux(ubuntu)服务器中,
先安装好docker环境,具体安装docker的如下:
1.1. 更新源
apt-get update
1.2. 安装docker,安装及自动启动
apt-get install docker.io -y
1.3. 查看版本
docker --version
1.4. 查看正在运行的容器的信息
docker ps
当我们看到入下图,则说明我们docker环境安装成功:
2、docker部署gitlab
2.1. 拉取gitlab镜像
docker pull gitlab/gitlab-ce
2.2. 运行gitlab容器
docker run -d -p 80:80 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
2.3. 修改配置文件
修改gitlab.rb配置文件
(这里挂载了gitlab容器中的文件到了宿主机,直接修改宿主机上的相应路径的文件,便修改了容器内的文件)
vim /home/gitlab/config/gitlab.rb
配置http协议所使用的访问地址,不加端口号默认为80,这里修改为该服务器的ip地址,如:
external_url 'http://192.168.1.245'
进入到容器内部,修改gitlab.yml文件
vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
如下图:
另外有邮箱其他的配置信息,根据需要配置,修改完成之后,保存退出.
:wq!
2.4. 重启容器
docker restart gitlab
2.5. 浏览器访问
浏览器访问ip即可,如:
192.168.1.245
注: 刚开始可能重启会有点慢,会有502页面,稍等片刻,再次刷新就可以了,然后修改密码,登入即可.
二、gitlab-runner搭建
首先需要在宿主机安装好java环境
1、准备java环境
1.1. 下载安装openjdk-8
apt install openjdk-8-jdk
安装成功后,则查看java环境
java -version
jdk安装路径为:
/usr/lib/jvm/java-8-openjdk-amd64/
1.2. 配置环境变量
vi etc/profile
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
修改完了保存并退出,执行命令使配置生效:
source /etc/profile
这里理论上是不需要了,但我后面需要把jdk挂载到容器中,需要用到。
2、准备maven环境
2.1. 安装maven
这里我是拷贝了自己电脑上的maven和本地仓库到宿主机,如图:
当然需要重新配置maven的本地仓库的地址:
2.2. 配置maven环境变量
vim /etc/profile
追加配置信息,如下图所示:
修改完了保存并退出,执行命令使配置生效:
source /etc/profile
查看maven环境:
mvn -v
看到输出信息,说明宿主机的maven环境配置成功了
3、准备nodejs环境
3.1. 下载nodejs包
这里我使用的10.16.3的版本
wget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
3.2. 解压压缩包
tar xvf node-v10.16.3-linux-x64.tar.xz
3.3. 移动/重命名文件夹
修改名字并移动到usr/local/目录下
mv node-v10.16.3-linux-x64 nodejs
配置,需要创建软链接,以便全局使用
ln -s /usr/local/nodejs/bin/node /usr/bin/node
ln -s /usr/local/nodejs/bin/npm /usr/bin/npm
3.4. 完成检验
执行命令
node -v && npm -v
如下图:
看到以上输出信息说明成功
4、gitlab-runner的安装
4.1. 拉取镜像&运行容器
docker run --name=gitlab-runner --restart=always --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env=DEBIAN_FRONTEND=noninteractive --volume=/srv/gitlab-runner/config:/etc/gitlab-runner:rw --volume=/var/run/docker.sock:/var/run/docker.sock:rw --volume=/usr/bin/docker:/usr/bin/docker:rw --volume=/usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib64/libltdl.so.7:rw --volume=/usr/lib/jvm/java-8-openjdk-amd64:/usr/lib/jvm/java-8-openjdk-amd64:rw --volume=/java_environment:/java_environment:rw --volume=/etc/profile:/etc/profile:rw --volume=/usr/local/nodejs:/usr/local/nodejs:rw --volume=/home/gitlab-runner --volume=/etc/gitlab-runner --restart=always --detach=true gitlab/gitlab-runner:latest run --user=root --working-directory=/home/gitlab-runner
4.2. docker run的参数说明
--restart=always
#Docker重启后该容器也为随之重启
-u root
#以root的身份去运行镜像(避免在容器中调用Docker命令没有权限)
#最好使用docker用户去运行
-v /usr/bin/docker:/usr/bin/docker
#将宿主机的docker命令挂载到容器中
#可以使用which docker命令查看具体位置
#或者把挂载的参数改为: -v $(which docker):/usr/bin/docker
-v /var/run/docker.sock:/var/run/docker.sock
#容器中的进程可以通过它与Docker守护进程进行通信
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
#libltdl.so.7是Docker命令执行所依赖的函数库
#容器中library的默认目录是 /usr/lib/x86_64-linux-gnu/
#把宿主机的libltdl.so.7 函数库挂载到该目录即可
#可以通过whereis libltdl.so.7命令查看具体位置
#centos7位置/usr/lib64/libltdl.so.7
#ubuntu位置/usr/lib/x86_64-linux-gnu/libltdl.so.7
--volume=/etc/profile:/etc/profile:rw
#挂载了/etc/profile环境配置文件,用来使java和maven环境生效
--volume=/usr/lib/jvm/java-8-openjdk-amd64:/usr/lib/jvm/java-8-openjdk-amd64:rw
--volume=/java_environment:/java_environment:rw
--volume=/usr/local/nodejs:/usr/local/nodejs:rw
#挂载宿主机的java的配置文件路径,使用宿主机的java环境、maven环境和nodejs环境
这里需要注意的事
gitlab安装和gitlab-runner的安装地址作用不一样
根据我们开发的需要来安装
比如,我们私有的代码仓库是在192.168.1.1,而我们开发环境是在192.168.1.2,测试环境在192.168.1.3
那么我们在192.168.1.1搭建了gitlab,gitlab-runner这个应该分别在192.168.1.2和192.168.1.3的服务器上,这样做的意义,
在项目的配置文件中则只要利用设置对应的tag(标签)来区分我们要部署到的对应环境即可。
5、gitlab-runner的注册
5.1. 获取gitlab-ci的Token和地址
需要使用管理员账号登录到gitlab上
5.2. 注册gitlab-runner
进入192.168.1.2服务器中,
docker exec -it gitlab-runner /bin/bash
执行命令注册gitlab-runner
gitlab-runner register
注册步骤:
1.输入gitlab的服务URL,这个使用的是https://gitlab.com/
2.输入gitlab-ci的Toekn,获取方式参考上图
3.关于集成服务中对于这个runner的描述
4.给这个gitlab-runner输入一个标记,这个tag非常重要,在后续的使用过程中需要使用这个tag来指定gitlab-runner
5.是否运行在没有tag的build上面。在配置gitlab-ci的时候,会有很多job,每个job可以通过tags属性来选择runner。这里为true表示如果job没有配置tags,也执行
6.是否锁定runner到当前项目
7.选择执行器,gitlab-runner实现了很多执行器,可用在不同场景中运行构建,详情可见GitLab Runner Executors,这里选用Shell模式
刷新页面就可以看到新增的一个Runner:
5.3. 配置runner
把项目加到该runner到便可以了。
三、部署
1、后端(Java)部署
.gitlab-ci.yml 文件需要放在项目的根目录下
1.1. pom文件配置
pom.xml 需要配置maven插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</build>
1.2. 关于.gitlab-ci.yml的预设变量的说明
1.3. gitlab-ci.yml 文件配置和说明
variables:
ENVIRONMENT: test # 开发环境设置为dev、生产环境为prod,测试环境为test
HOST_PORT: port # 宿主机端口
CONTAINER_PORT: port # 容器端口
PROJECT_NAME: project_name # 项目名称
# 部署阶段
stages:
- build_deploy
build_dev:
stage: build_deploy
tags:
- cloud_test # 开发环境设置为cloud_dev、生产环境为cloud_prod,测试环境为cloud_test(192.168.1.2)
script:
- source /etc/profile # 使容器内配置文件生效
- mvn -v # 检查maven环境
- java -version # 检查java环境
- echo "$CI_JOB_STAGE" # 预设变量
- echo "Project will be packaged! !"
- mvn clean package -Dmaven.test.skip=true # 跳过测试打包
- echo "Packaged successly!"
- echo "Build image and deploy project start!"
- export TZ=UTC-8 # 设置当前时区
- export CURRENT_DATE=$(date -d "now" '+%Y%m%d%H%M%S') # 当前日期时间
- echo "$CURRENT_DATE" # 输出日期时间
- ls ./target
- cp ./target/${PROJECT_NAME}-1.0.0.jar ${PROJECT_NAME}-1.0.0.jar # 设置从target拷贝出来的原因是在docker内找不到target下的文件...
- ls
- export CONTAINER=$(docker ps --format "table {{.Names}}" | grep ${PROJECT_NAME}_${ENVIRONMENT}) # 根据项目名字查看当前运行的docker
- echo "$CONTAINER" # 输出查找到的docker容器
- if [ -n "$CONTAINER" ];then docker stop $CONTAINER; fi; # 如果存在相同项目名的docker容器,则把该容器停止。
- if [ -z "$CONTAINER" ];then echo "empty~"; fi; # 找不到则输出empty~
- docker build -t cloud/${PROJECT_NAME}_${ENVIRONMENT}_${CURRENT_DATE}:latest . && docker run -d -it -p ${HOST_PORT}:${CONTAINER_PORT} --name ${PROJECT_NAME}_${ENVIRONMENT}_${CURRENT_DATE} cloud/${PROJECT_NAME}_${ENVIRONMENT}_$
{CURRENT_DATE}:latest # 构建镜像并运行起来
- echo "Deploy finished!" # 完成部署
- echo "Project already be deployed in Development environment"
1.4. 关于Dockerfile
该文件放在项目的根目录
project_name #项目名称
version #版本
spring.profiles.active=test #打包环境
如下图配置:
# 基础镜像使用java
FROM java:8
# WORKDIR 指定了临时文件目录为/ROOT。
WORKDIR /ROOT
# 将jar包复制到项目的根目录
COPY project_name-version.jar /project_name-version.jar
# 端口开放
EXPOSE 83
## 运行jar包 (开发环境设置为dev、生产环境为prod,生产环境为test)
ENTRYPOINT ["java","-Dfile.encoding=UTF-8", "-jar", "/project_name-version.jar","--spring.profiles.active=test"]
2、前端(Vue)部署
2.1. gitlab-ci.yml 文件的配置
variables:
ENVIRONMENT: test # 开发环境设置为dev、生产环境为prod,测试环境为test
HOST_PORT: port # 宿主机端口
CONTAINER_PORT: port # 容器端口
PROJECT_NAME: project_name # 项目名称
stages:
- build_deploy
build_dev:
stage: build_deploy
tags:
- cloud_test # 开发环境设置为cloud_dev、生产环境为cloud_prod,测试环境为cloud_test(192.168.1.245)
script:
- echo "Starting to install node_modules..."
- node -v # 检查node 版本
- npm -v # 检查npm 版本
- npm config get registry
- ls -a
- npm install --unsafe-perm=true --allow-root # npm 打包
- echo "Web project will be packaged! !"
- ls -a
- npm run test # 测试环境
- echo "Package successly! "
- export CONTAINER=$(docker ps --format "table {{.Names}}" | grep ${PROJECT_NAME}_${ENVIRONMENT})
- echo "$CONTAINER"
- export TZ=UTC-8
- export CURRENT_DATE=$(date -d "now" '+%Y%m%d%H%M%S')
- echo "$CURRENT_DATE"
- if [ -n "$CONTAINER" ];then docker stop $CONTAINER; fi;
- if [ -z "$CONTAINER" ];then echo "empty~"; fi;
- docker build -t ${PROJECT_NAME}_${ENVIRONMENT}_${CURRENT_DATE}:latest . && docker run -d -it -p ${HOST_PORT}:${CONTAINER_PORT} --name ${PROJECT_NAME}_${ENVIRONMENT}_${CURRENT_DATE} ${PROJECT_NAME}_${ENVIRONMENT}_${CURRENT_DATE}:latest
- echo "Web Projcet deploy successly! "
2.2. Dockerfile的配置
# 该项目在192.168.1.2这个服务器上, 发布的时候
FROM nginx
# 定义作者
MAINTAINER MAINTAINER _NAME
# 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
COPY ./dist /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 84
RUN echo 'echo init ok!!'
2.3. nginx文件的配置
这里根据公司/个人项目需要配置
更多推荐
所有评论(0)