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

Linux系统:第十五章:gitlab集成CI,springmvc面试题 一台主机上有多个Linux系统,会经常切换,那么这些系统使用同一ip,登录过一次后就会把ssh信息记录在本地的~/.ssh/known_hsots文件中,切换该系统后再用ssh访问这台主机就会出现冲突警告,需要手动删除修改known_hsots里面的内容。既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。 阅读详情

集成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
Linux系统:第十五章:gitlab集成CI(1),看完吊打面试官 variables:ssh_name: root #远程连接服务器的用户uat_server_ip: xx.xx.xx.xx #远程连接的服务器ipuat_ssh_password: /usr/local/pem/qt_dev_cert.pem #从密码文件读取文件内容作为密码去远程连接主机jar_name: community-fragrant-starter.jar #项目打包成jarjava_path: /usr/java/jdk1.8.0_131/bin #jdk路径upload_path: /ho 阅读详情

相关推荐

Sonarqube与Gitlab集成

Sonarqube与Gitlab集成

fishinhouse的专栏 8213

sshpass工具使用

sshpass使用

qq_34953582的博客 1609

别光看Demo了!用UE5 Lyra框架快速搭建你的多人对战游戏原型(含完整配置流程)

本文详细介绍了如何利用UE5 Lyra框架快速搭建多人对战游戏原型,包含完整的配置流程和实战案例。Lyra作为可直接二次开发的游戏模板,内置了GAS技能系统、Enhanced Input输入控制等核心功能,大幅缩短开发周期。通过替换角色模型、调整武器数值和配置新地图规则,开发者可在48小时内完成科幻团队竞技游戏原型的搭建。

weixin_28717411的博客 457

06 docker-gitlab-runner CD

持续部署 上一章我们弄好打了一个持续集成,和持续交付,这一章主要做持续发布, 当我们开发完成之后,提交代码,就要发布的内网进行一个测试, 接着重.gitlab-ci.yml 开始,新增一个job, 用了sshpass sshpass 用于非交互的ssh密码验证,允许使用-p参数指定明文密码 可能应为本人的开发环境经常变动,所以没有考虑使用 ssh免密的方式。 dev-job: #启动开发环境job stage: dev_start image: ictu/sshpass #需要一个上传ssh 的

suertian的博客 636

矩阵LED和矩阵按键

先说矩阵LED,如图: 下面以行几、列几的表达方法说明 三极管可以当做开关使用 由图可知,如果想让一个LED亮,那么它对应的行和列的三极管都要导通。如果这个矩阵每次只亮一个LED,那么正常写程序没问题。 如果我们想让LED1和LED6亮,其他灯不亮,则需要开启行1、行2、列1、列2,随之带来的问题就是LED2和LED5也会跟着亮起来。 解决方法类似于扫描,因为单片机运行速度很快,可以在很短的时间内开关数次而肉眼看不到。所以我们可以每次只亮一列(排)灯,亮单位时间后关掉同时开启另外一列(排),如此四次一循环

qq_46615634的博客 5797

WSL2 + Open3D点云可视化踩坑全记录:从GLFW报错到VcXsrv配置,一篇讲清所有‘坑’

本文详细解析了在WSL2环境中使用Open3D进行点云可视化时遇到的常见问题,特别是GLFW报错和VcXsrv配置问题。通过系统性的解决方案和高级配置技巧,帮助开发者彻底解决图形显示、驱动加载和库版本冲突等难题,实现高效的点云可视化。

weixin_30627341的博客 101

Linux系统:第十五章:gitlab集成CI,Java进阶之光

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: ..

m0_64384202的博客 293

STM32CubeMX-电机控制2-电机相关配置部分

STM32CubeMX-电机霍尔传感器 写在前面的话:之前一直使用库函数,调程序时总会觉得是配置出现问题,要画一些时间去检查配置程序,所以目前转到了STM32CubeMX。写这些内容一方面是整理记录,因为是刚入门,所以难免出现错误,希望能得到大家指正;另一方面是因为自己一个人调试,走了很多弯路,写下来希望能给相同处境的人一些参考。 步骤一: 电机霍尔传感器接口 我目前使用的是STM32F4,电机的...

niker_co的博客 1万+

Linux系统:第十五章:gitlab集成CI,我三年开发经验从字节跳动抖音离职后

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

m0_56175058的博客 798

2025年GESP12月认证C++四级真题解析

摘要 本文包含11道C++编程题目,涵盖指针、数组、函数参数传递、结构体和排序算法等知识点。每题2分,总分30分,主要考察学生对C++基础语法的掌握程度。题目包括指针定义与解引用(第1-4题)、二维/三维数组遍历(第4-5题)、变量作用域(第6题)、函数传参方式(第7题)、结构体操作(第8题)、递归算法(第9题)和排序稳定性判断(第10题)。最后第11题要求补全选择排序算法代码片段。每道题均提供标准答案和详细解析,适合用于检验C++基础知识的掌握情况。

lan_in的博客 318

基于YOLOv11的军事目标识别系统设计与实现(坦克、舰船检测)

DOTA-v2.0(包含多种军事装备的航拍图像)图片数量:11,268类别:18类,包括坦克、舰船、战斗机等分辨率:800×800~4000×4000HRSC2016(高分辨率舰船检测数据集)图片数量:1,061类别:舰船及子类特点:包含多种视角和复杂背景图片数量:5,000+类别:22种军用飞机标注:精确边界框自建数据集建议收集来源:公开军事演习视频、卫星图像、模拟游戏截图数据增强:模拟不同天气、遮挡、低光照等战场环境。

YOLO 450

自动化代码质量检测平台sonarqube搭建及使用,以及集成gitlab ci提交自动返回结果

Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持java, JavaScrip, Scala 等等二十几种编程语言的代码质量管理与检测。SonarQube®是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。原理架构,这里不多说了,网上一大把,咱们直接开干就完了。

1万+

Feature ‘alsa‘ was enabled, but the pre-condition ‘config.unix && !config.qnx && libs.alsa‘ failed解决

这个问题主要是Qt多媒体插件中缺少了ALSA音频库,所以我们需要自行先编译ALSA 在执行./configure的时候,配置项中ALSA为no Qt Multimedia: ALSA ................................... no GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux .............

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 2591

Gitlab CI集成工具的应用

Gitlab CI集成工具的应用 什么是Gitlab CI工具 Continuous Integration is a software development practice in which you build and test software every time a developer pushes code to the application, and it happens s...

Ricky点滴 4752

在ABAQUS中使用VUMAT子程序实现Hashin失效准则的详细解析与实践:深入探讨复合材料模拟仿真的高级编程技巧

Hashin失效准则是由材料科学家Shlomo Hashin于1962年提出的一种基于能量方法的多向失效理论,主要用于预测复合材料的破坏行为。与传统的单向失效理论不同,Hashin准则考虑了材料内部的多种独立破坏机制,如基体断裂、界面脱粘、纤维断裂等,这些机制在不同应力状态下可能同时或分别发生。通过计算各个机制的能量释放率,Hashin失效准则能够更为准确地预测复合材料在复杂应力状态下的破坏行为。

qq_38334677的博客 1950

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深入lunwen-skill内部:从intake到delivery_done的5状态机工作流设计原理

lunwen-skill 是一款面向本科计科学生的一键论文初稿 Skill,它的核心是一套由 5 个状态组成的工作流状态机:从 `intake`(收资料)一路推进到 `delivery_done`(成稿交付)。很多人只看到它"先分析样文、再确认目录、最后交付 .docx"的表面流程,却没注意到背后是状态约束在兜底。今天我们把这套状态机拆开讲清楚:为什么需要它、每个状态允许做什么、状态之间如何流转,

gitblog_00938的博客 939

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

gitlab-ci-local 实践指南:在本地跑通你的 GitLab CI 流水线

如果你刚改了一行 `.gitlab-ci.yml`,与其推送到远程仓库、等几分钟再看结果,不如用 gitlab-ci-local 在本地执行这条 GitLab CI 流水线。它解析你的流水线配置,按 stages 与 needs 顺序执行作业,支持 shell executor 和 docker executor 两种执行器,并提供 `--list` 预览、变量文件等配套能力。 ## 安装与第一

gitblog_00285的博客 896

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【原创】Linux下配置Gitlab CI自动更新代码

本文按我实际操作步骤编写,有些文字描述直接转自简书一篇文章。步骤安装GitLab-CIGitlab字段,无须安装安装GitLab-Runner1、下载安装包并设置执行权限sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries...

测试小窝 4596

CI持续集成之搭建Gitlab

作用 CI(continuous intergration)持续集成 持续集成:编写代码时,完成了一个功能后,立即提交代码到Git仓库中,将项目重新的构建并且测试。 快速发现错误。 防止代码偏离主分支。 建议部署在纯净的Linux系统环境中 实现CI,需要先搭建Gitlab远程仓库,先安装Gitlab 先前工具:安装Docker以及Docker-Compose(请查看往期) 一、修改主机端口解决端口冲突! 服务器的端口是22,但是Gitlib的端口也是22,这里需要先修改主机端口再部署

qq_52868193的博客 239
上一篇: RabbitMQ:第四章:RabbitMQ集群搭建
下一篇: Linux系统:第十三章:centos误删文件如何恢复文件数据
Java程序员廖志伟
Java程序员廖志伟 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 1902原创
评论 31
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java程序员廖志伟

赏我包辣条呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值