使用gitlab之CI、CD部署springboot项目的步骤(部署机为ubuntu系统)

2022-06-16 12:25:37

一、gitlab实现自动部署的原理

1、部署机上,需要安装插件 gitlab-runner

2、部署机安装 gitlab-runner之后,向gitlab服务器注册

3、gitlab服务器收到commit事件之后,通知部署机拉取代码,执行部署。

4、部署机执行什么操作,由项目目录下的.gitlab-ci.yml文件进行定义。

二、部署机需要的环境

1、安装jdk

2、安装配置maven

3、安装 gitlab-runner

三、部署机的环境安装的具体说明

1、安装jdk 的注意事项:需要给java创建指向/usr/bin/的链接

查看java命令的安装路径: type -p java

创建链接,示例: ln -s /usr/local/jdk1.8.0_102/bin/java /usr/bin/java

2、安装maven

检查是否安装: mvn -version

下载示例: wgethttp://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz

创建目录:mkdir /opt/maven mkdir /opt/maven/repository

解压示例:tar zxvf apache-maven-3.6.2-bin.tar.gz -C /opt/maven

把maven配置进系统环境变量示例:vim /etc/profile

/etc/profile增加:

export M2_HOME=/opt/maven/apache-maven-3.6.2

export CLASSPATH=$CLASSPATH:$M2_HOME/lib

export PATH=$PATH:$M2_HOME/bin

配置maven的库指向alibaba的库、及配置库的路径的conf/settings.xml示例:

<mirror>

<id>alimaven</id>

<mirrorOf>central</mirrorOf>

<name>aliyun maven</name>

<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>

</mirror>

<localRepository>/opt/maven/repository</localRepository>

3、安装 gitlab-runner,参考文档:https://docs.gitlab.com/runner/install/

ubuntu系统:https://docs.gitlab.com/runner/install/linux-repository.html

命令示例:

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash

sudo apt-get install gitlab-runner

安装成功的检查示例:gitlab-runner --help

安装成功之后,在/home目录会创建一gitlab-runner的用户,拉取的代码、临时编译文件在目录:/home/gitlab-runner/builds。

4、授权目录权限给gitlab-runner用户。

示例:

chmod 777 /opt/maven/repository

【注:对应的部署项目的路径,优先放在 /home/gitlab-runner/目录,这样减少授权目录权限给gitlab-runner用户的操作。

操作/home/gitlab-runner/目录时,应该使用gitlab-runner用户进行操作。执行命令: su gitlab-runner】

四、注册gitlab-runner

参考文档:https://docs.gitlab.com/runner/register/

1、查看项目的注册码

gitlab的项目路径-->Settings-->CI/CD-->Runnber-->Specific Runners-->registration token。如下图。

2、在部署机gitlab-runner使用注册码向gitlab服务器登记

命令示例:sudo gitlab-runner register

其中tags的名字,是将来告诉部署命令,要不要这台机器跑的标识。参考文档:https://docs.gitlab.com/ee/ci/runners/README.html#using-tags

示例:

Please enter the gitlab-ci coordinator URL (e.g.https://gitlab.com/):http://IP

Please enter the gitlab-ci token for this runner: 注册码,registration token

Please enter the gitlab-ci description for this runner: 运行器描述,如electrumCommon_Formal

Please enter the gitlab-ci tags for this runner (comma separated):运行器标签名称 projectElectrumCommon-formal-20191029

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

【执行器选择shell。将来优先考虑使用docker,使用docker比较方便】

3、注册完成之后,可以在 gitlab的项目路径-->Settings-->CI/CD-->Runnber-->Specific Runners看到。

【删除注册:

第一步,在服务器上使用命令取消: sudo gitlab-runner unregister --all-runners

或 sudo gitlab-runner list

sudo gitlab-runner unregister -n 名称

第二步,在gitLab管理页面-setting/CICD/找到runner,检查对应的注册是否存在】

五、编写部署命令。【gitlab的pipeline的流水线任务文件.gitlab-ci.yml】

参考文档:

yml文档:https://docs.gitlab.com/ee/ci/yaml/README.html

SpringBoot示例:https://docs.gitlab.com/ee/ci/examples/deploy_spring_boot_to_cloud_foundry/

java Maven示例:https://docs.gitlab.com/ee/ci/examples/artifactory_and_gitlab/

1、流水线任务文件的原理:

甲、分为一个一个stage(阶段)进行执行。 一个阶段执行成功之后,才会执行下一个阶段。

乙、一个阶段,由一组命令组成。

2、添加.gitlab-ci.yml文件示例:

在项目目录下创建文件.gitlab-ci.yml

git add .gitlab-ci.yml

git commit -m "add .gitlab-ci.yml"

git push origin master

3、单个项目,只打包的操作,区分多个部署环境,

说明:

stage: 阶段名称

tags:

- 向gitlab注册runner时的tag标签

before_script:

- 执行script前执行的script

script:

- mvn $MAVEN_CLI_OPTS clean package -Dmaven.test.skip=true 【mvn清除】

- mvn $MAVEN_CLI_OPTS compile 【mvn编译】

- mvn $MAVEN_CLI_OPTS install -DskipTests -Djar -e -Dmaven.test.skip=true 【mvn安装打包】

after_script:

- 执行script后执行的script

only:

refs:

- formal 【表示仅在formal分支有提交代码的操作之后执行】

网络请求触发示例:https://gitlab.example.com/api/v4/projects/9/ref/master/trigger/pipeline?token=TOKEN

预定义的环境变量:Predefined environment variables reference

$CI_COMMIT_REF_NAME 提交时的分支名

$CI_PROJECT_DIR 源代码所在目录

$CI_COMMIT_BEFORE_SHA 前一个提交编号

$CI_COMMIT_REF_NAME 分支或标签名称

问题:This job is stuck, because the project doesn't have any runners online assigned to it. Go to Runners page

解决:

The job is stuck because your runners have tags but your jobs don't.。

set tags to your jobs.

https://docs.gitlab.com/ee/ci/yaml/#tags

job内定义作业流程的参数列表

Keyword

Required

Description

script

yes

定义在runner中执行的命令

extends

no

Defines a configuration entry that this job is going to inherit from

include

no

Defines a configuration entry that allows this job to include external YAML files

image

no

Use docker image, covered inUsing Docker Images

services

no

Use docker services, covered inUsing Docker Images

stage

no

定义job属于哪个阶段,默认test阶段

type

no

stage别名

variables

no

定义job层次的变量

only

no

定义哪些分支或tag的修改触发该流程

except

no

定义哪些分支或tag的修改不触发该流程

tags

no

定义哪个标签的runner来执行,该标签指runner配置时的名称,不是Git的tag分支

allow_failure

no

Allow job to fail. Failed job doesn’t contribute to commit status

when

no

Define when to run job. Can be on_success, on_failure, always or manual

dependencies

no

定义该job依赖于哪项job的结果,用于把之前job的附件传进来

artifacts

no

定义job产生的附件,可用于下载和保存以及传递,没有该项设置产生的过程文件都会被删除

cache

no

定义缓存的文件或文件夹,如果是在job外定义则为全局变量

before_script

no

定义job执行前的操作

after_script

no

定义job执行后的操作

environment

no

Defines a name of environment to which deployment is done by this job

coverage

no

Define code coverage settings for a given job

retry

no

定义任务失败后的重复执行次数或时间

parallel

no

定义并行的任务数量,限于2~50

trigger

no

Defines a downstream pipeline trigger

坑:

坑一:tags 不能填两个。 坑址:https://gitlab.com/gitlab-org/gitlab-runner/issues/4056

解决途径:https://stackoverflow.com/questions/49198663/answer/submit

  • 作者:丰太君
  • 原文链接:https://blog.csdn.net/feng_tai_jun/article/details/105222485
    更新时间:2022-06-16 12:25:37