gitlab_ci/cd详细过程(代码片段)

louisliao_1981 louisliao_1981     2022-10-24     743

关键词:

一、GitLabRunner服务器安装Docker和GitLabRunner环境

(一)、增加GitlabRunner用户以及Docker用户组

  1. 增加GitlabRunner用户
# 增加gitlab-runner用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# 修改组目录权限
sudo chmod -R 766 /home/gitlab-runner
# 使用setfacl设置权限(可选)
sudo setfacl -m d:user:gitlab-runner:rwx
sudo setfacl -m group:other:rww
  1. 增加Docker用户组,并将gitlab-runner用户加入Docker用户组(实现不用sudo 启动docker)
sudo groupadd docker
sudo usermod -aG docker gitlab-runner

(二)、安装Docker依赖环境

sudo apt-get install \\
    ca-certificates \\
    curl \\
    gnupg \\
    lsb-release

(三)、使用阿里源安装Docker

  1. 需要添加软件源的 GPG 密钥
$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 官方源
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 修改sources.list 中添加 Docker 软件源
$ echo \\
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \\
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 官方源
# $ echo \\
#   "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \\
#   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 开启Docker
sudo systemctl enable docker
sudo systemctl start docker

(四)、设置Docker镜像源并重启Docker

  1. vi /etc/docker/daemon.json 增加镜像地址

  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
  "insecure-registries": ["192.168.1.213:8086"],
  "live-restore": true

  1. 让配置生效并重启docker
systemctl daemon-reload
systemctl restart docker

(五)、安装GitLabRunner服务

  1. 下载GitLabRunner
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"
  1. 修改执行文件权限
sudo chmod +x /usr/local/bin/gitlab-runner
  1. 安装和运行GitLabRunner服务
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

二、GitLabRunner服务器注册Runner

  1. 使用GitLabRunner的命令在本服务器注册一个Runner
# url 为Gitlab的地址,token为Gitlab中可在具体的一个项目中的设置>>CI/CD>Runner中提示的值
sudo gitlab-runner register  --url http://192.168.1.26:9980 --registration-token cJMXGJWx7qx9AmpSc6ee 

a. 项目中


a. 群组中的设置


具体的项目中注册的Runner默认会只对当前项目有效,如果要共享给其他项目,就需要进入GitLab界面编辑Runner,去掉“锁定当前项目”的勾选

2.选择执行器并配置相关信息

a. 运行了上面的 gitlab-runner register 命令后会提示选择使用那一种Runner执行器,这里我们选择Shell

Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker

b. 然后会让输入执行器对应的Tag。这里的Tag的值是和.gitlab-ci.yml中的tags是对应的。也可以通过在GitLab的界面中修改Runner的Tag值。

三、配置免密登陆和Scp拷贝

配置GitLabRnner服务所在服务器与发布的目标服务器之间的免密登陆

(一)、生成公私钥

在GitLabRnner服务所在服务器通过以下命令切换到gitlab-runner用户,并进入/home/gitlab-runner目录,运行ssh-keygen命令生成公私钥

sudo su gitlab-runner
cd /home/gitlab-runner
ssh-keygen -t rsa -C "xxxx@163.com"

(二)、拷贝公钥到目标服务器

将上一步生成的公钥拷贝到目标服务器对应用户的主目录下的./ssh/authorized_keys文件中。有两种方式
第一种:自己在目标服务器通过vi 打开authorized_keys文件,把公钥拷贝到其中,并保存
第二种:通过下面的命令进行拷贝

ssh-copy-id -i ~/.ssh/id_rsa.pub userxxxxx@192.168.xx.xx

(三)、测试免密登陆和scp拷贝

通过以下命令测试免密登陆和scp免密拷贝,如果没有要求输入对应用户的密码,即为成功

ssh userxxxxx@192.168.xx.xx
scp -o StrictHostKeyChecking=no /home/gitlab-runner/xxxx/xxxx.jar userxxxxx@192.168.xx.xx

如果仍然需要输入密码,请尝试修改authorized_keys这个文件的权限为600,并重启sshd(sudo chmod ~/.ssh/authorized_keys 600 && /etc/init.d/sshd restart)

四、定义流水线文件.gitlab-ci.yml

# stage步骤,一个流水线需要经过的步骤
stages:
  - build
  - deploy

#job's name 可以随意取
buildJar:
  stage: build
  only:
   # 指定只对某个分支的代码触发
    - dev
  script:
#    package 已包含 test 步骤,所以流程中不需要另外配置test job
    - export curPath=$(pwd)
    - docker run -i --rm -v $curPath:/usr/src/projectxxxx -w /usr/src/projectxxxx maven:3.3-jdk-8 mvn clean package
  tags:
    - maven_tag
  artifacts:
    #是job生成的中间产物,会以压缩包(.zip)的形式生成。它会自动上传到gitlab服务器
    paths:
      - target/admin.jar
deploy files:
  stage: deploy
  only:
    - dev
  script:
    - scp -o StrictHostKeyChecking=no userxxxxx@192.168.xx.xx:/home/userxxxxx/target/admin.jar 
  tags:
    - maven_tag

其他示例

stages:
  - build jar
  - build and run image

#job's name 可以随意取
buildJar:
  stage: build jar
  variables:
    # 默认是clone,改为fetch加快拉取速度(若本地无则会自动clone)
    GIT_STRATEGY: fetch
  only:
    - dev
  script:
    - >
      docker run -d --rm --name justforpackage-$CI_COMMIT_REF_NAME
      -v "$(pwd)":/build/inkscreen
      -v /inkscreen/maven/m2:/root/.m2
      -w /build/inkscreen
      maven:3-jdk-8 mvn clean package

    - sleep 60
  tags:
    - inkscreen_hostrunner
  artifacts:
    paths:
      - louwen-admin/target/louwen-admin.jar
    expire_in: 3600 seconds

testDeploy:
  stage: build and run image
  only:
    - dev
  variables:
    # 不拉取代码
    GIT_STRATEGY: none
    IMAGE_NAME: louwen/inkscreen-api:$CI_COMMIT_REF_NAME
    PORT: 38082
  before_script:
    # 移除旧容器和镜像。这里为什么要写成一行,下面有讲
    - if [ docker ps | grep inkscreen-$CI_COMMIT_REF_NAME ]; then docker stop inkscreen-$CI_COMMIT_REF_NAME; docker rm inkscreen-$CI_COMMIT_REF_NAME; docker rmi $IMAGE_NAME; fi
  script:
    - docker build --build-arg JAR_PATH=louwen-admin/target/louwen-admin.jar -t $IMAGE_NAME .
    - >
      docker run -d --name inkscreen-$CI_COMMIT_REF_NAME
      -p $PORT:$PORT
      --network my_bridge --env spring.redis.host=myredis
      -v /inkscreen/inkscreen-api/logs/:/logs/
      -v /inkscreen/inkscreen-api/louwen-admin/src/main/resources/:/configs/
      $IMAGE_NAME
  tags:
    - inkscreen_hostrunner

.gitlab-ci.yml配置参数

关键词	描述
script	必选参数,指定runner运行的脚本(如 npm run build)
image	需要在docker中使用到的环境镜像(如 node:8.11.2)
services	需要的service镜像
before_script	作业执行前需要执行的命令
after_script	作业执行后需要执行的命令
stages	定义流水线所有的阶段
stage	定义作业所处流水线的阶段(默认test阶段)
only	限制作业在什么时候创建运行(比如是某个分支、某个tag等)
except	限制作业在什么时候不创建运行
tags	作用使用的Runner运行器的标签列表
allow_failure	允许作业失败,失败的作业不影响提交的状态
when	指定什么时候运行作业
environment	部署的环境
cache	指定需要在job之间缓存的文件或目录
artifacts	归档文件列表,指定成功后应附加到job的文件和目录的列表
dependencies	当前作业依赖的其他作业,你可以使用依赖作业的归档文件
coverage	作业的代码覆盖率
retry	作业失败时,可以自动尝试的次数
parallel	指定并行运行的作业实例
trigger	定义下游流水线的触发器
include	作业加载其他YAML文件
extends	控制实体从哪里继承
variables	定义环境变量

参考文章

官方中文文档
GitLab-CI/CD入门实操
GitLabCI的流水线实践
当谈到 GitLab CI 的时候,我们该聊些什么(上篇)
当谈到 GitLab CI 的时候,我们都该聊些什么(下篇)
Docker安装Gitlab和Gitlab-Runner并实现项目的CICD
Gialab YMAL 原文地址
Gitlab CI yaml官方配置文件翻译
gitlab-ci配置详解(一)
gitlab-ci配置详解(二)

Docker中国区官方镜像
https://registry.docker-cn.com

网易
http://hub-mirror.c.163.com

ustc 
https://docker.mirrors.ustc.edu.cn

中国科技大学
https://docker.mirrors.ustc.edu.cn

https://iccdq93l.mirror.aliyuncs.com

gitlab_ci/cd详细过程(代码片段)

一、GitLabRunner服务器安装Docker和GitLabRunner环境(一)、增加GitlabRunner用户以及Docker用户组增加GitlabRunner用户#增加gitlab-runner用户sudouseradd--comment'GitLabRunner'--create-homegitlab-runner--shell/bin/b 查看详情

zookeeper集群搭建详细过程|附带详细过程截图(代码片段)

🚀作者:“大数据小禅”🚀简介:详细讲解Zookeeper的环境搭建,附带过程截图。🚀安装包获取:获取对应的安装包可以通过最下方公众号联系我备注获取。1.Zookeeper简介ZooKeeper顾名思义动物园管理员&#... 查看详情

zookeeper集群搭建详细过程|附带详细过程截图(代码片段)

🚀作者:“大数据小禅”🚀简介:详细讲解Zookeeper的环境搭建,附带过程截图。🚀安装包获取:获取对应的安装包可以通过最下方公众号联系我备注获取。1.Zookeeper简介ZooKeeper顾名思义动物园管理员&#... 查看详情

mysql中的存储过程(详细篇)(代码片段)

文章目录概述优点缺点MySQL存储过程的定义存储过程的基本语句格式存储过程的使用定义一个存储过程定义一个有参数的存储过程定义一个流程控制语句IFELSE定义一个条件控制语句CASE定义一个循环语句WHILE定义一个循环语句REPEATU... 查看详情

vstfp虚拟用户配合详细过程(代码片段)

vsftpd虚拟用户配置环境准备[[email protected]~]#systemctlstopfirewalld[[email protected]~]#systemctldisablefirewalld[[email protected]~]#sed-i"s/^SELINUX=enforcing/SELINUX=disabled/g"/etc/selinu 查看详情

androidactivity的详细启动过程分析(代码片段)

AndroidActivity的详细启动过程分析版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com在正式内容开始之前,我建议读者朋友下载platform/framework/base源代码备用,我们可以到Android源码托管站下载ÿ... 查看详情

gitlab搭建详细过程(代码片段)

一、前提系统:Centos6.5软件版本:gitlab-7.8.4Selinux:关闭防火墙规则:先清空(搭建好了后续自己添加相关放行规则) 二、yum源配置和相关依赖包 1.添加epel源和PUIAS_6_computational源1#yum-yinstallepel-release   创建该文... 查看详情

centos7下搭建testlink环境详细过程(代码片段)

...闭防火墙、以及安装配置过程中遇到的一些问题。以下是详细的搭建过程。一、工具准备       以下是我在搭建过程中用到的工具版本:  1.Testlink----testlink-1.9.17     查看详情

activity的启动过程详细分析(代码片段)

前言        我们在平时开发中都知道通过这样的代码就可以启动一个Activity,如下Context.startActivity(intent)        但是,你有没有思考这个方法的大致实现呢?下面,我们一起来看看。startActivity的调用流程... 查看详情

activity的启动过程详细分析(代码片段)

前言        我们在平时开发中都知道通过这样的代码就可以启动一个Activity,如下Context.startActivity(intent)        但是,你有没有思考这个方法的大致实现呢?下面,我们一起来看看。startActivity的调用流程... 查看详情

lamp实验作业详细过程(代码片段)

1、请描述一次完整的http请求处理过程;由客户端发起请求给服务端,服务端接收到请求后解析http报文内容,把处理完成后的内容反馈给客户端,再将每次请求记录在日志中。2、httpd所支持的处理模型有哪些,他们的分别使用于... 查看详情

apachshiro密码加密过程(明文生成密码过程)详细解析(代码片段)

前言:最近再项目当中使用的ApachShiro安全框架,对于权限和服务器资源的保护都有一个很好的管理。前期主要参考的文章有 项目中设计密码的加盐处理以及二次加密问题,跟着断点一步步揭开ApachShiro的神秘面纱 数据库... 查看详情

搭建elk日志分析平台的详细过程(代码片段)

搭建ELK日志分析平台的详细过程 日志分析系统-ELK平台由于日志文件都离散的存储在各个服务实例的文件系统之上,仅仅通过查看日志文件来分析我们的请求链路依然是一件相当麻烦的差事。ELK平台,它可以轻松的帮助我们... 查看详情

移植qt至tiny210详细过程(代码片段)

实验所需资源:tiny210(cortex-a8)QT版本:5.6.2PC环境:UBUNTUtslib:tslib-1.4交叉工具链:4.5.1开发板已装载好Linux编译tslib可能需要安装的库:sudoapt-getinstallautoconfsudoapt-getinstallautomakesudoapt-getinstalllibtool编译安装步骤如下:tarxzftslib-1. 查看详情

pycharm连接服务器同步写代码(图文详细过程)(代码片段)

pycharm连接服务器同步写代码(图文详细过程)废话不多说直接上图中文界面打开工具——>部署——>配置点击左上角+,选择SFTP新建服务器名称随便取点击配置ssh连接填上自己的公网ip和用户名和密码(我这里直接连接docke... 查看详情

pycharm连接服务器同步写代码(图文详细过程)(代码片段)

pycharm连接服务器同步写代码(图文详细过程)废话不多说直接上图中文界面打开工具——>部署——>配置点击左上角+,选择SFTP新建服务器名称随便取点击配置ssh连接填上自己的公网ip和用户名和密码(我这里直接连接docke... 查看详情

[tensorflow系列-1]:tensorflow深度学习框架的详细安装过程(代码片段)

作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119160174目录1. Tensorflow概述2.Tensorflow详细的安装过程2.1官网(中国)查看tensorfl 查看详情

sql之存储过程详细介绍及语法(篇幅比较长慢慢看)(代码片段)

1:定义     存储过程(storedprocedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。     存储过程分为系统存储过程和自定... 查看详情