Linux系统:第十五章:gitlab集成CI

简介: Linux系统:第十五章:gitlab集成CI

集成gitlab的CI首先需要安装好docker和gitlab,大家可以参考我上一章节:Linux系统:第十四章:安装Docker,下载安装配置gitlab以及jenkins,图文讲解CI流程。


正文开始:

gitlab-runner命令:

docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

gitlabrunner注册gitlab

docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
  --non-interactive \
  --executor "docker" \
  --docker-image alpine:latest \
  --url "http://xx.xxx.xxx.x:8012" \
  --registration-token "zh5GqHF_bqZx-5iDSqty" \
  --description "docker-runner" \
  --tag-list "docker,aws" \
  --run-untagged="true" \
  --locked="false" \
  --access-level="not_protected"

需要修改的:registration-token和url 在gitlab中的以下部分复制:

Menu->Admin->overview->runner



.gitlab-ci.yml文件配置(可做参考)

# 定义一些变量, 下面各阶段会使用
variables:
  ssh_name: root #远程连接服务器的用户
  uat_server_ip: xx.xx.xx.xx #远程连接的服务器ip
  uat_ssh_password: /usr/local/pem/qt_dev_cert.pem #从密码文件读取文件内容作为密码去远程连接主机
  jar_name: community-fragrant-starter.jar #项目打包成jar
  java_path: /usr/java/jdk1.8.0_131/bin #jdk路径
  upload_path: /home/project/community #上传项目的目录
#开始结束打印日志
before_script:
  - echo '=================start=================='
after_script:
  - echo '=================finish=================='
# 定义执行的各个阶段及顺序,本次构建的阶段:build package deploy
stages:
  - build
  - upload
  - deploy
# 打包 Job,使用 maven 镜像打包项目
job_build:
  stage: build
  image: maven:3.5.0-jdk-8
  script:
    - mvn package -Dmaven.test.skip=true
  cache:
    key: m2-repo
    paths:
      - .m2/repository
  artifacts:
    paths:
      - target/$jar_name
# 上传生成的 jar 包到你的应用服务器。
job_upload_prod:
  stage: upload
  image: ictu/sshpass
  script:
    - ls -l target/
    - sshpass -f $uat_ssh_password scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no target/$jar_name $ssh_name@$uat_server_ip:$upload_path/$jar_name
  only:
    - master
#部署 Job
job_deploy_prod:
  stage: deploy
  image: ictu/sshpass
  script:
    - echo "java start service"
    - sshpass -f $uat_ssh_password ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $ssh_name@$uat_server_ip "cd $upload_path;chmod 777 $jar_name;sudo systemctl stop fragrant.service; sudo systemctl start fragrant.service;sudo systemctl status fragrant.service;"
  only:
    - master

.gitlab-ci.yml文件配置详细说明

定义一些变量, 下面各阶段会使用

variables:
  ssh_name: root #远程连接服务器的用户
  uat_server_ip: xx.xx.xx.xx #远程连接的服务器ip
  uat_ssh_password: /usr/local/pem/qt_dev_cert.pem #从密码文件读取文件内容作为密码去远程连接主机
  jar_name: community-fragrant-starter.jar #项目打包成jar
  java_path: /usr/java/jdk1.8.0_131/bin #jdk路径
  upload_path: /home/project/community #上传项目的目录

开始结束打印日志

before_script:
  - echo '=================start=================='
after_script:
  - echo '=================finish=================='

定义执行的各个阶段及顺序,本次构建的阶段:build package deploy

stages:
  - build
  - upload
  - deploy

打包 Job

使用 maven 镜像打包项目

-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

打包 Job配置:

job_build:
  stage: build
  image: maven:3.5.0-jdk-8
  script:
    - mvn package -Dmaven.test.skip=true
  cache:
    key: m2-repo
    paths:
      - .m2/repository
  artifacts:
    paths:
      - target/$jar_name

标题上传生成的 jar 包到你的应用服务器

这里使用 ictu/sshpass 这个镜像,是为了使用 sshpass 命令

配置:UserKnownHostsFile=/dev/null和 StrictHostKeyChecking=no。

作用:SSH登陆时会忽略known_hsots的访问。

原因:ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。一台主机上有多个Linux系统,会经常切换,那么这些系统使用同一ip,登录过一次后就会把ssh信息记录在本地的~/.ssh/known_hsots文件中,切换该系统后再用ssh访问这台主机就会出现冲突警告,需要手动删除修改known_hsots里面的内容。

only:- master:限制只有master的分支

job_upload_prod:
  stage: upload
  image: ictu/sshpass
  script:
    - ls -l target/
    - sshpass -f $uat_ssh_password scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no target/$jar_name $ssh_name@$uat_server_ip:$upload_path/$jar_name
  only:
    - master

部署 Job

cd $upload_path;进入上传jar包的目录

chmod 777 $jar_name;给jar包授权

sudo systemctl stop fragrant.service;暂停服务

sudo systemctl start fragrant.service;开启服务

sudo systemctl status fragrant.service;查看服务状态


fragrant.service是一个脚本,需要再/usr/lib/systemd/system目录下面创建一个fragrant.service脚本文件,创建好脚本文件之后还需要设置开机自启动,命令:systemctl enable fragrant.service

fragrant.service脚本内容:

  [Unit]
  Description=service for description
  After=syslog.target network.target remote-fs.target nss-lookup.target
  [Service]
  Type=forking
  ExecStart=/home/project/community/fragrant-start.sh
  ExecStop=/home/project/community/fragrant-stop.sh
  PrivateTmp=true
  [Install]
  WantedBy=multi-user.target

然后在上传项目的目录下创建二个开启和暂停的脚本

fragrant-start.sh 脚本内容

#!/bin/sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_301
export PATH=$JAVA_HOME/bin:$PATH
nohup java -jar /app/api/fragrant/community-fragrant-starter.jar > /app/log/fragrant/community-fragrant-starter.log &
echo $! > /app/run/fragrant.pid

fragrant-stop.sh 脚本内容

#!/bin/sh
PID=$(cat /app/run/fragrant.pid)
kill -9 $PID

部署 Job配置:

job_deploy_prod:
  stage: deploy
  image: ictu/sshpass
  script:
    - echo "java start service"
    - sshpass -f $uat_ssh_password ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $ssh_name@$uat_server_ip "cd $upload_path;chmod 777 $jar_name;sudo systemctl stop fragrant.service; sudo systemctl start fragrant.service;sudo systemctl status fragrant.service;"
  only:
    - master
相关文章
|
2月前
|
安全 定位技术 API
婚恋交友系统匹配功能 婚恋相亲软件实现定位 语音社交app红娘系统集成高德地图SDK
在婚恋交友系统中集成高德地图,可实现用户定位、导航及基于地理位置的匹配推荐等功能。具体步骤如下: 1. **注册账号**:访问高德开放平台,注册并创建应用。 2. **获取API Key**:记录API Key以备开发使用。 3. **集成SDK**:根据开发平台下载并集成高德地图SDK。 4. **配置功能**:实现定位、导航及基于位置的匹配推荐。 5. **注意事项**:保护用户隐私,确保API Key安全,定期更新地图数据,添加错误处理机制。 6. **测试优化**:完成集成后进行全面测试,并根据反馈优化功能。 通过以上步骤,提升用户体验,提供更便捷的服务。
|
1月前
|
人工智能 数据挖掘 API
R2R:开源的 RAG 集成系统,支持多模态处理、混合搜索、知识图谱构建等增强检索技术
R2R 是一款先进的 AI 检索增强生成平台,支持多模态内容处理、混合搜索和知识图谱构建,适用于复杂数据处理和分析的生产环境。
176 3
R2R:开源的 RAG 集成系统,支持多模态处理、混合搜索、知识图谱构建等增强检索技术
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
81 8
|
6月前
|
分布式计算 DataWorks 关系型数据库
MaxCompute 生态系统中的数据集成工具
【8月更文第31天】在大数据时代,数据集成对于构建高效的数据处理流水线至关重要。阿里云的 MaxCompute 是一个用于处理大规模数据集的服务平台,它提供了强大的计算能力和丰富的生态系统工具来帮助用户管理和处理数据。本文将详细介绍如何使用 DataWorks 这样的工具将 MaxCompute 整合到整个数据处理流程中,以便更有效地管理数据生命周期。
203 0
|
3月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
64 2
|
3月前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
639 1
|
4月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
125 0
|
4月前
|
SQL 数据库连接 数据库
管理系统中的Visual Studio与SQL集成技巧与方法
在现代软件开发和管理系统中,Visual Studio(VS)作为强大的集成开发环境(IDE),与SQL数据库的紧密集成是构建高效、可靠应用程序的关键
|
4月前
|
SQL 监控 数据库
管理系统VS SQL:高效集成的关键技巧与方法
在现代企业信息化建设中,管理系统(如ERP、CRM等)与SQL数据库之间的紧密集成是确保数据流动顺畅、业务逻辑高效执行的关键
|
5月前
|
并行计算 关系型数据库 分布式数据库
朗坤智慧科技「LiEMS企业管理信息系统」通过PolarDB产品生态集成认证!
近日,朗坤智慧科技股份有限公司「LiEMS企业管理信息系统软件」通过PolarDB产品生态集成认证!