还在用jenkins?试试gitlab的ci/cd功能吧(代码片段)

xiangzhihong8 xiangzhihong8     2023-01-19     600

关键词:

在之前,要实现自动化打包部署,一般都需要借助Jenkins。不过,现在Gitlab的CI/CD功能也能实现自动化部署,并且操作更加简单。如果你也正在使用Gitlab作为Git仓库的话,不妨试试它的CI/CD功能。

一、安装

通过Gitlab的CI/CD功能实现自动化部署,我们需要安装Gitlab、Gitlab Runner、Maven这些服务。

1.1 安装Gitlab

首先,我们需要在我们自己的服务器上安装Gitlab,如果还不知道怎么安装,可以参考《10分钟搭建自己的Git仓库》

为了避免一些不必要的麻烦,我们可以使用如下命令运行Gitlab服务,这里需要注意的是添加了hostname属性,这样我们就可以通过域名来访问Gitlab了,GITLAB_ROOT_PASSWORD这个环境变量可以直接设置Gitlab中root账号的密码:

docker run --detach \\
  --hostname git.bilibili.com \\
  --publish 10443:443 --publish 1080:80 --publish 1022:22 \\
  --name gitlab \\
  --restart always \\
  --volume /mydata/gitlab/config:/etc/gitlab \\
  --volume /mydata/gitlab/logs:/var/log/gitlab \\
  --volume /mydata/gitlab/data:/var/opt/gitlab \\
  -e GITLAB_ROOT_PASSWORD=12345678 \\
  gitlab/gitlab-ce:latest

然后,我们就可以通过git.bilibili.com这个域名来访问Gitlab,如果你没有域名的话,可以通过修改本机的host文件来实现:

192.168.7.134 git.bilibili.com

由于我们的Gitlab运行在1080端口,如果我们想要不加端口来进行访问,可以使用Nginx的反向代理进行处理,对Nginx不熟悉的朋友可以看下《Nginx的这些妙用,你肯定有不知道的!》 。下面是Nginx的配置文件夹中添加的git.conf配置文件,内容如下:

server 
    listen       80; # 同时支持HTTP
    server_name  git.bilibili.com; #修改域名

    location / 
        proxy_pass   http://192.168.7.134:1080; # 设置代理服务访问地址
        index  index.html index.htm;
    

    error_page   500 502 503 504  /50x.html;
    location = /50x.html 
        root   /usr/share/nginx/html;
    

完成之后,我们就可以通过git.bilibili.com这个域名来访问Gitlab了,输入账号密码root:12345678即可登录。

将我们的SpringBoot应用代码上传到Gitlab上去,这样Gitlab就准备完毕了!这里需要注意的是,如果你在启动Gitlab的时候没有指定hostname的话,你的项目HTTP访问地址会是容器的ID,使用该地址会无法访问Git仓库!

1.2 安装Gitlab Runner

Gitlab只是个代码仓库,想要实现CI/CD还需安装gitlab-runner,gitlab-runner相当于Gitlab中任务的执行器,Gitlab会在需要执行任务时调用它。

首先,下载gitlab-runner的Docker镜像,选用alpine-bleeding,这个版本非常小巧。

docker pull gitlab/gitlab-runner:alpine-bleeding

然后,使用如下命令运行gitlab-runner。

docker run --name gitlab-runner --restart always \\
-v /var/run/docker.sock:/var/run/docker.sock \\
-v /mydata/gitlab-runner:/etc/gitlab-runner \\
-d gitlab/gitlab-runner:alpine-bleeding

此时,我们如果查看gitlab-runner的容器日志的话,会发现如下错误,config.toml文件找不到。这个问题不必担心,当我们将gitlab-runner注册到Gitlab时,会自动生成该文件。

ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory  builds=0

接下来,我们需要把gitlab-runner注册到Gitlab,打开Project->Settings->CI/CD功能,获取到runner注册需要使用的地址和token。

接下来,使用如下命令进入gitlab-runner容器的内部。

docker exec -it gitlab-runner /bin/bash

然后,在容器内使用如下命令注册runner。

gitlab-runner register

注册时会出现交互界面,提示你输入注册地址、token、执行器类型等信息,ssh执行器能远程执行Linux命令等,如下所示。

注册完成后,我们可以发现config.toml文件已经生成,内容如下,以后想修改runner配置的时候,直接改这个文件就行了。

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "docker-runner"
  url = "http://192.168.7.134:1080/"
  token = "c2kpV6tX6woL8TMxzBUN"
  executor = "ssh"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.ssh]
    user = "root"
    password = "123456"
    host = "192.168.7.134"
    port = "22"

接着,打开Gitlab上的项目,然后在Gitlab的CI/CD设置中就可以发现runner成功注册了!

1.3 安装Maven

SpringBoot项目打包需要依赖Maven,我们需要在服务器上先安装好它。首先,下载Maven的Linux安装包,下载地址

下载完成后,使用如下命令解压到指定目录。

cd /mydata
tar -zxvf apache-maven-3.8.1-bin.tar.gz

接着,修改/etc/profile文件,添加环境变量配置。

export MAVEN_HOME=/mydata/apache-maven-3.8.1
export PATH=$PATH:$MAVEN_HOME/bin

我们可以使用mvn -v命令来测试Maven是否安装成功。

Maven home: /mydata/apache-maven-3.8.1
Java version: 1.8.0_292, vendor: AdoptOpenJDK, runtime: /mydata/java/jdk1.8/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

1.4 安装JDK

CentOS上默认安装的是JRE,使用Maven需要安装JDK。首先,下载JDK 8。
下载完成后,将JDK解压到指定目录。

cd /mydata/java
tar -zxvf OpenJDK8U-jdk_x64_linux_xxx.tar.gz
mv OpenJDK8U-jdk_x64_linux_xxx.tar.gz jdk1.8

然后,再在/etc/profile文件中添加环境变量JAVA_HOME。

vi /etc/profile
# 在profile文件中添加
export JAVA_HOME=/mydata/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
# 使修改后的profile文件生效
. /etc/profile

二、使用CI/CD进行部署

一切准备就绪,接下来通过Gitlab的CI/CD功能就可以实现SpringBoot应用的自动化部署了!首先,在项目的根目录下添加.gitlab-ci.yml文件,定义了两个任务,一个任务会将应用代码打包成Jar包并复制到指定目录,另一个任务会通过运行脚本run.sh打包应用的Docker镜像并运行。

# 打包任务
build-job:
  stage: build
  # 指定标签,只有具有该标签的runner才会执行
  tags:
    - docker
  script:
    # 使用Maven打包
    - mvn clean package
    # 将jar包、Dockerfile、运行脚本复制到指定目录
    - cp target/mall-tiny-gitlab-1.0-SNAPSHOT.jar /mydata/build/mall-tiny-gitlab-1.0-SNAPSHOT.jar
    - cp Dockerfile /mydata/build/Dockerfile
    - cp run.sh /mydata/build/run.sh

# 部署任务
deploy-job:
  stage: deploy
  tags:
    - docker
  script:
    # 进入指定目录并执行运行脚本
    - cd /mydata/build
    - chmod +x run.sh
    - ./run.sh

需要说明的是,默认情况下runner只会执行具有相同标签的Job,由于我们对Job和runner都设置了标签为docker,所以我们这里是可以执行的。如果你没有设置标签的话,需要在runner的编辑界面设置下让runner可以执行没有标签的Job。

由于我们的gitlab-runner采用的是ssh的执行器,它会登录到我们指定的服务器,执行我们在.gitlab-ci.yml中定义的script命令,在此之前还会先从Git仓库中获取代码,所以我们还需修改下服务器上的host文件。

vim /etc/hosts
192.168.7.134 git.bilibili.com

接下来就是要把脚本提交到Git仓库上去,提交后会在Project->CI/CD->Pipelines中发现正在执行的任务。

打开Pipeline的详情页面,可以发现我们定义的两个任务的执行结果。


打开Job的详情界面,我们可以看到任务执行过程中输出的日志信息。

如果你想手动执行Pipeline,而不是提交触发的话,可以在Pipelines页面点击Run Pipeline按钮即可。

可以看到,使用它的CI/CD功能来实现自动化部署确实很不错!安装一个轻量级gitlab-runner,编写简单的.gitlab-ci.yml脚本文件即可实现。

ci/cd之jenkins(代码片段)

jenkinsCI/CD简介jenkins简介jenkins安装安装jenkins插件安装中文插件安装流水线插件安装gitlab插件jenkins和gitlab联动jenkins轮询检查gitlab代码变更使用webhook实时检查gitlab代码变更推送dockerfile文件自动构建镜像新增agent节点jenkins用户管理CI... 查看详情

ci/cd之jenkins(代码片段)

jenkinsCI/CD简介jenkins简介jenkins安装安装jenkins插件安装中文插件安装流水线插件安装gitlab插件jenkins和gitlab联动jenkins轮询检查gitlab代码变更使用webhook实时检查gitlab代码变更推送dockerfile文件自动构建镜像新增agent节点jenkins用户管理CI... 查看详情

ci/cd之jenkins+gitlab(代码片段)

文章目录一、Jenkinx+Gitlab持续集成环境概述(1)什么是CI/CD(2)Jenkins概述(3)Gitlab概述(4)Gitlab和Github的区别(5)Jenkins配合Gitlab持续集成系统的工作流程二、部署持续集成环境(1&... 查看详情

devops学习笔记-jenkins实现基础ci/cd操作

在之前的devops工具链中完成了jenkins以及gitlab配置之后,可以实现基础的CI/CD操作。操作流程整体的操作的流程如下所示:在开发环境配置好代码之后,将代码上传到gitlab,jenkins拉取gitlab的代码,由maven插件build,打包好后,构建docke... 查看详情

ci/cd技术专题「jenkins实战系列」如何通过gitlab对接jenkins构建提交自动触发部署构建体系指南(上部)(代码片段)

前因后果最近,发现我们公司的自动化体系做的实在是不咋地,每次提交push完代码之后,还需要登录到服务器进行执行下docker脚本,之后才能拿到镜像,一说到这里我就要吐了,CI/CD做的简直是一团糟࿰... 查看详情

ci/cd持续集成与持续交付(上)--------git,gitee远程共有仓库和gitlab私有仓库,jenkins(代码片段)

...结合远程共有仓库github/gitee三、远程私仓库gitlab搭建一、jenkins持续集成1jenkins简介2jenkins安装3.jenkins插件安装4.jenkins项目创建,每隔1分钟看gitlab的变化5.实时看gitlab的变化,g 查看详情

gitlabci/cd自动部署方案探索

...的版本管理,gitlab本身就用CI/CD的功能,原定是使用gitlab+Jenkins+Docker的流行部署框架的,但是gitlab-runner配置简单,很容易与gitlab集成。当新建一个项目的时候,不需要配置webhook回调地址,也不需要同时在jenkins新建这个项目的编... 查看详情

gitlabci+jenkins实践

参考技术A开启ci只要在git仓库的根路径下创建一个.gitlab-ci.yml的yaml文件.事例网站:https://gitlab.com/gitlab-examples具体说名:使用添加.gitlab-ci.yml文件之后,提交到gitlab之后,在该仓库的CI/CD=>Pipelines和Jobs就能看到打包结果.解决方法:解决... 查看详情

jenkins-pipeline配置简介

...细节,弱化了配置流程,如果想看完整的配置流程请点击Jenkins和gitlab(webhooks)的CI/CD前置工作。在你想要做CI/CD的工程中增加jenkinsfile并编写相应脚本。在jenkins中创建Pipeline风格的任务。除以下介绍的要点外,其他流程基本与Jen... 查看详情

基于jenkins+maven+gitlab+harbor+rancher+k8s的ci/cd实现(尚未完成,还在更新中)(代码片段)

1、Jenkins安装1.1、配置java环境变量,使用的是jdk1.8的,上传jdk包到/usr/local/java目录下#创建java下载安装目录mkdir-p/usr/local/java#编辑profile文件,配置java环境变量vim/etc/profileexportPATH=$PATH:$HOME/bin:/usr/local/java/jdk 查看详情

springboot+git+jenkins+docker实现ci/cd

...不去了解,不去实践,这次就以Springboot为底,利用Git,jenkins,Docker实现持续集成和持续部署!开发流程下面是常用的开发流程图:我们简单说说这张图:首先我们会将代码文件、测试文件以及Dockerfile都存在代码仓库里,版本控... 查看详情

gitlab的ci/cd配置管理(代码片段)

gitlab的CI/CD配置管理(二)标签(空格分隔):运维系列一:gitlabCI/CD介绍二:配置gitlab的CI/CD的runner三:代码的MAVEN打包环境四:配置gitlab的CI文件五:发布项目一:gitlabCI/CD介绍1.1gitlabCI/CD概述Gitlab是常用的开源git代码管理工具... 查看详情

ci/cd之jenkins结合ansible部署apache(代码片段)

jenkins结合ansible部署apache演示环境部署步骤安装ansible创建新git项目ansible主控端配置ansible主配置文件编写配置清单编写下载apache的playbook修改apache配置文件最终目录结构如下jenkins测试配置用户设置jenkins部署部署测试在测试环境测... 查看详情

jenkins与docker的自动化ci/cd流水线实战(代码片段)

Jenkins与Docker的自动化CI/CD流水线实战标签(空格分隔):docker的部分一:什么是CI/CD二:发布流程设计三:部署Git仓库并上传测试代码一:什么是CI/CD持续集成(ContinuousIntegration,CI):代码合并、构建、部署、测试都在一起,不... 查看详情

ci/cd1jenkins,actions(代码片段)

文章目录1.jenkins:构建/测试/部署就是CICD工具即jenkins,但jenkins需要个人提供一台运行jenkins的机器2.GitLab与Jenkins集成:Jenkins镜像像nginx一样2.1Jenkins-docker配置:运行在8080端口上,机器只要安装docker就能装载image... 查看详情

如何搭建自己的ci/cd平台:gitlab+jenkins+docker+harbor+k8s集群搭建cicd平台(持续集成部署hexo博客demo)

写在前面聊聊​​CICD​​​的​​环境搭建​​​以及一个基于​​Hexo​​​的博客系统在​​CICD​​​流程中的配置​​Demo​​很早就想着写这样一篇博文,但是没有时间,之前写了一半,正好春节假期把剩下的一般写完.本文... 查看详情

ci/cd之jenkins结合ansible部署apache(代码片段)

jenkins结合ansible部署apache演示环境部署步骤安装ansible创建新git项目ansible主控端配置jenkins测试配置用户设置jenkins部署部署测试在测试环境测试在生产环境部署建议演示环境server1 192.168.122.11 gitlab端 4G内存server2 192.168.122.12 j... 查看详情

如何使用gitlab和rancher构建ci/cd流水线–part2

这是我们使用GitLab和Rancher构建CI/CD流水线系列教程的第二部分。第一部分的内容介绍了如何部署、配置和确保GitLab在Rancher的运行。这一部分中,我们将介绍如何使用GitLabCIMulti-Runner构建容器,以及如何使用GitLab容器registry配置项... 查看详情