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
相关文章
|
3月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
230 3
Linux系统禁用swap
|
3月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
344 3
|
4月前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
4月前
|
存储 Ubuntu Linux
「正点原子Linux连载」第二章Ubuntu系统入门
在图2.8.2.4中,我们使用命令umount卸载了U盘,卸载以后当我们再去访问文件夹/mnt/tmp的时候发现里面没有任何文件了,说明我们卸载成功了。
|
2月前
|
网络安全 开发工具 git
在GitLab CI中同步HTTPS仓库地址的yaml配置
最后,提交并推送 `.gitlab-ci.yml`文件到您的GitLab仓库。GitLab CI/CD将自动识别这个文件,并在每次推送到 `master`分支时执行定义的同步任务。
164 16
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
305 0
Linux系统初始化脚本
|
4月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
240 18
|
4月前
|
缓存 监控 Ubuntu
在Ubuntu 16.04上配置GitLab Runner以激活GitLab CI/CD流程
完成以上步骤后,每当代码被推送到远端仓库中相对应分支上时,GitLb CI / CD 流水线就会自动触发,并由之前注册好了 GitLb runner 的机器去完成定义好了 ` .gitlabcicd.yml ` 文件里面定义好各种任务(如编译测试部署等).
186 13
|
3月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
286 1
|
3月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1014 1