侧边栏壁纸
博主头像
银河小徐博主等级

A Good Boy ⛵️⛵️⛵️

  • 累计撰写 42 篇文章
  • 累计创建 39 个标签
  • 累计收到 10 条评论

目 录CONTENT

文章目录

Jenkins + Gitlab + Docker + Spring Boot 实现自动部署

银河小徐
2021-08-27 / 0 评论 / 10 点赞 / 66 阅读 / 14,809 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-06-04,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

本文主要介绍持续集成的搭建方式,采用 Docker 的方式去搭建 Jenkins 环境,篇幅有点长,请仔细阅读。(无废话版)

推荐阅读本篇文章的注意事项篇节以后再进行搭建。

Docker安装

本文中我们使用 Centos7.x 进行 Docker 安装,所以我们需要在虚拟中先安装 Centos7,这一步请阅读者自行安装。

Docker安装步骤

# 1. yum 包更新到最新。
sudo yum update

# 2. 安装需要的软件包,yum-util提供yun-config-manager功能,另外两个是devicemapper驱动依赖的。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 3. 设置yum源为阿里云。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4. 安装docker。
sudo yum install docker-ce

# 5. 安装完成后查看docker版本。
docker -v

设置ustc的镜像(此处也可用阿里云免费镜像加速)

ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

编辑该文件(没有该文件则新建):

vim /etc/docker/daemon.json

在该文件中输入如下内容:

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

或阿里云的镜像加速(二选一)

{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}

Docker的启动与停止

# 启动docker
systemctl start docker

# 停止docker
systemctl stop docker

# 重启docker
systemctl restart docker

# 查看docker状态
systemctl status docker

# 开机启动docker
systemctl enable docker

Gitlab安装

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目安装。类似GitHub,能够浏览源代码,管理缺陷和注释,可以管理团队对仓库的访问。

查询并拉取镜像

# 查询gitlab镜像版本
docker search gitlab
# 拉取镜像
docker pull gitlab/gitlab-ce:latest

创建GitLab的配置 (config) 、 日志 (log) 、数据 (data) 三个文件夹,放到容器之外, 便于日后升级, 因此请先准备这三个目录

mkdir -p /apps/Devops/gitlab/config
mkdir -p /apps/Devops/gitlab/log
mkdir -p /apps/Devops/gitlab/data

运行GitLab容器

运行成功后,此时会在上面我们创建的目录中生成一些文件,后面需要修改文件。

docker run --detach \
--publish 8443:443 --publish 8090:8090 --publish 2222:22 \
--name gitlab \
--restart always \
--volume /apps/Devops/gitlab/config:/etc/gitlab \
--volume /apps/Devops/gitlab/logs:/var/log/gitlab \
--volume /apps/Devops/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

8090端口是页面访问端口。

【注意】:gitlab初次启动比较慢,耐心等待后再访问页面!

修改配置文件

修改 /apps/Devops/gitlab/config/gitlab.rb

# 进入文件后,把external_url改成部署机器的域名或者IP地址,并取消注释。

vim /apps/Devops/gitlab/config/gitlab.rb
external_url 'http://192.168.137.119:8090'      # ip为部署机器的IP或域名

如图:

gitlab配置访问

更改完配置文件运行以下命令重启容器

docker restart gitlab

通过浏览器访问,默认账号root, 需要设置一个新密码。

访问报502说明容器还没启动完成,等待片刻即可访问到如下页面。

gitlab登录

至此,Gitlab搭建完成。

Jenkins安装

拉取镜像

docker pull jenkins/jenkins:lts

创建目录

由于防止jenkins中重要文件因为容器损毁或删除导致文件丢失,因此创建文件对外挂载。

mkdir -p /apps/Devops/jenkins

并且需要对目录开放docker进程操作的完全读写的权限

chmod 777 /apps/Devops/jenkins

启动容器

docker run -itd -p 9980:8080 -p 50000:50000  --restart always -v /apps/Devops/jenkins:/var/jenkins_home --name jenkins  jenkins/jenkins:lts

-p 端口映射:Jenkins是Java程序,默认端口是8080

打开Jenkins管理页面

访问地址:http://192.168.137.119:9980/

jenkins登录页

出现如上页面,代表jenkins启动成功。

查看日志获取初始密码

执行以下命令:

docker logs -f jenkins

复制下图中红框内的初始密码。

当然,你也可以不通过日志查看,你可以进入黄色框中描述的文件查看初始密码也是一样的,二选一。

jenkins日志

通过描述文件查看密码:

# 1. 进入运行的jenkins容器中。
docker exec -it jenkins /bin/bash

# 2. 进入容器中的/var/jenkins_home/secrets目录,初始密码就在initialAdminPassword文件中。
cd /var/jenkins_home/secrets
cat  initialAdminPassword

# 3. 退出容器
exit

将密码复制、粘贴到如下框框中,进入jenkins,需要等待数十秒(可能更久)!

jenkins密码输入

如果出现下图情况,等很久,还没有进入:

jenkins登录加载中

解决方案:
(1)进入我们前面挂载的Jenkins目录 /apps/Devops/jenkins,修改文件 hudson.model.UpdateCenter.xml

cd /apps/Devops/jenkins
vim hudson.model.UpdateCenter.xml

(2)将文件 hudson.model.UpdateCenter.xmlhttps://updates.jenkins.io/update-center.json 改成 http://updates.jenkins.io/update-center.json(把https改成http)。

https替换

(3)保存,重启Jenkins容器

docker restart jenkins

(4)重新进入Jenkins管理页面:http://192.168.137.119:9980/(稍等一会儿,就可以进入)

安装推荐的插件

如下图所示,左侧显示安装建议的插件。右侧选择自定义安装插件。

先按照建议插件进行安装,点击左侧即可。

安装推荐插件

如果全部都能正确安装,更好。出现安装失败的插件,等待所有结束,下方会有Retry可以进行重试。

最后重试后,依旧没有安装成功的,可以先continue,完成初始化的步骤。随后参考这篇文章解决

安装完成后会自动出现如下界面:

创建管理用户

将信息输入对应输入框内,点击保存并完成,之后的步骤默认点击保存并完成即可。

成功安装Jenkins

出现下图代表成功安装Jenkins:

jenkins安装成功图

安装成功之后重启一下jenkins容器:

docker restart jenkins

Jenkins配置

设置Jenkins时区为北京时间

点击 Manage Jenkins(系统管理) ——> Script Console(脚本命令行)

设置jenkins时区

输入脚本并运行:

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

如图显示Result表示成功:

设置jenkins时区成功

安装自动化构建和部署所需的插件

所需插件:Maven IntegrationPipeline Maven IntegrationGitlabGitlab hookSSHPublish Over SSHDocker

点击 Manage Jenkins(系统管理) ——> Manage Plugins(插件管理)

插件管理

安装Maven插件

点击可选插件 ——> 过滤Maven Integration插件 ——> 勾选Maven Integration和Pipeline Maven Integration ——> 点击直接安装

安装Maven插件

如图开始安装插件:

安装Maven插件进行中

安装完成后,即可在插件管理下的已安装选项卡下看到刚刚已经安装的插件。

安装Gitlab插件

点击可选插件 ——> 过滤Gitlab插件 ——> 勾选Gitlab和Gitlab Hook ——> 点击直接安装

安装Gitlab插件

安装SSH插件和Publish Over SSH插件

安装Publish Over SSH插件的原因:因为本方式是使用docker启动jenkins服务,所以在jenkins后续执行构建任务时候,需要在build成功后,将服务的jar包(以spring boot)服务为例,需要将jar包拷贝到Dockerfile所在服务器的指定目录,进行微服务的启动;所以,此处需要配置SSH服务器的连接,意思就是在jenkins的任务结束后,去执行指定的服务器上的shell命令,做spring boot或cloud服务的镜像的构建,容器的运行,等一系列的事情。

点击可选插件 ——> 过滤SSH插件 ——> 勾选SSH和Publish Over SSH ——> 点击直接安装

安装SSH插件

安装Docker插件

点击可选插件 ——> 过滤Docker插件 ——> 勾选Docker ——> 点击直接安装

安装Docker插件

插件全部安装完成后,可以重启一下Jenkins。

添加凭据

点击 Manage Jenkins(系统管理) ——> Manage Credentials(凭据管理)

凭据管理

点击添加凭据 ——> 输入宿主机服务器的用户名和密码等信息并保存

凭据信息

配置SSH remote hosts

这个配置是干什么的呢?配置SSH连接Dockerfile所在服务器的相关信息,并添加凭证,最后测试连接并保存,以备后面使用!!!

点击 Manage Jenkins(系统管理) ——> 系统配置

配置SSH-remote-hosts

找到配置 ——> 下拉选择SSH remote hosts

找到SSH-remote-hosts

如下图,输入对应的信息,并校验是否连接成功!成功后,点击应用 ——> 点击保存

SSH-remote-hosts配置信息

配置Publish over SSH

找到配置 ——> 下拉选择SSH remote hosts

进行相关配置即可。

Publish-over-SSH

全局工具配置

由于我们要实现的是SpringBoot项目的自动化部署操作,所以需要安装JDK、Git、Maven、Docker。

全局工具配置

安装JDK

可以安装多个,根据项目JDK版本需求。

输入自定义JDK名称 ——> 勾选自动安装 ——> 输入Oracle账户、密码 ——> 选择JDK版本 ——> 勾选同意协议

安装JDK

安装Git

输入自定义Git名称 ——> 勾选自动安装

安装Git

安装Maven

输入自定义名称 ——> 勾选自动安装 ——> 选择版本

安装Maven

安装Docker

输入自定义名称 ——> 勾选自动安装

安装Docker

最后,点击应用 ——> 点击保存即可。

新建Jenkins任务

点击新建任务,输入名称

注意:本名称一般和项目名称一致,因为本名称会在jenkins工作空间下生成目录,类似于IDEA或Eclipse的工作空间的概念。所以,一般情况下,保证本名称=项目名称=docker镜像名称=docker容器名称 这样能尽可能的减轻jenkins配置的shell命令的复杂性!(空间命名要小写:因为镜像名不允许存在大写字母)

选择构建一个Maven项目(因为是Spring Boot的服务)

构建Maven项目

源码管理

输入描述信息,源码管理选择Git,从gitlab复制克隆地址粘贴到Repository URL中,没有报错就表示OK的,(注意,这里我是克隆HTTP方式的地址,如果你是克隆SSH方式的地址,你需要添加Credentials,配置一下就可以了)

源码管理

构建触发器

接下来将会生成供gitlab配置webhook使用的URL和Token,请记录下来,后面会使用。

触发构建URL

点击高级,拉下来找到Generate并点击,生成一串Secret Token。

触发构建Token

添加webhook

前往gitlab,进入要构建的项目,在setting中选择Webhooks,输入URL和Secret Token 这两在上面图中已经给你标注了,去掉Enable SSL verification的勾选。

gitlab-webhook配置

点击Add webhook,如图表示成功添加了webhook:

webhook配置成功

如果添加不成功解决方案请参考:解决 Url is blocked: Requests to the local network are not allowed

构建环境

勾选Add timestamps to the Console Output,等下可以看到控制台打印的信息,这个根据自己的需求勾选。

构建环境

Pre Steps(构建之前的步骤)

配置前一步需要做的事情是:清理本项目在jenkins的workspace中的历史文件夹。

你可以不用知道WORKSPACE具体的地址在哪里,因为下方有链接可以查看到当前jenkins中有哪些可用的变量供你使用。

默认WORKSPACE地址:/var/jenkins_home/workspace(如果你jenkins是docker启动的,并且挂载了目录在宿主机,那你在宿主机也是可以看到的,即 /apps/Devops/jenkins/workspace

本处选择的是执行shell,则表示本处配置的shell命令,是默认在jenkins容器中执行的,而不是在宿主机上。

下拉选择执行 shell:

执行构建前的操作

在执行shell的命令中输入以下命令,设置全局变量:

SERVER_NAME_1=jenkins-docker-gitlab-springboot
echo "=========================>>>>>>>工作空间WORKSPACE的地址:$WORKSPACE "
cd $WORKSPACE
echo "=========================>>>>>>>进入工作空间WORKSPACE,清除工作空间中原项目的工作空间$SERVER_NAME_1 "
rm -rf $SERVER_NAME_1
echo "=========================>>>>>>>清除工作空间中原项目的工作空间$SERVER_NAME_1 ......成功success"

注意:本处的SERVER_NAME_1=jenkins-docker-gitlab-springboot是配置项目的名称

Build(构建)

我们是SpringBoot项目,所以用到maven,这里设置一下全局操作,clean项目,并打成jar包,所以这里输入:clean package

Build构建

Post Steps(执行任务)

只在jenkins构建成功后,才执行这一步。

因为最后的构建成功的maven项目的jar包是以docker启动服务为目的,所以最后的docker操作,一定是在jenkins容器以外的服务器上运行的,可能是本机宿主机,也可能是远程的服务器,这个根据自己的情况去配置。

本处选择,在远程的SSH执行shell脚本。

选中只有构建成功才执行这些命令,然后选择Execute shell script on remote host using ssh。

执行任务

# =====================================================================================
# =================================定义初始化变量======================================
# =====================================================================================

# 操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/apps/jenkins-docker-gitlab-springboot

# jenkins构建好的源jar路径  
SOURCE_PATH=/apps/Devops/jenkins/workspace

#【docker 镜像】【docker容器】【Dockerfile同目录下的jar名字[用它build生成image的jar]】【jenkins的workspace下的项目名称】
# 这里都以这个命名[微服务的话,每个服务都以 ms-项目名 这种格式命名]
# 注意统一名称!!!!!
SERVER_NAME=jenkins-docker-gitlab-springboot

# 容器id  [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID]  [无论容器启动与否,都获取到]
CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')

# 镜像id  [grep -w 全量匹配镜像名] [awk 获取信息行的第三列,即镜像ID]
IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')

# 源jar完整地址  [jenkins构建成功后,会在自己的workspace/项目/target 下生成maven构建成功的jar包,获取jar包名的完整路径]
# 例如:/apps/Devops/jenkins/workspace/jenkins-docker-gitlab-springboot/target/jenkins-docker-gitlab-springboot-0.0.1-SNAPSHOT.jar
SOURCE_JAR_PATH=$(find "$SOURCE_PATH/$SERVER_NAME/target/"  -name "*$SERVER_NAME*.jar" )

DATE=`date +%Y%m%d%H%M%S`


# =====================================================================================
# ============================对原本已存在的jar进行备份================================
# =====================================================================================



# 备份
function backup(){
    if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
        echo "=========================>>>>>>>$SERVER_NAME.jar 备份..."
            mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
        echo "=========================>>>>>>>备份老的 $SERVER_NAME.jar 完成"

    else
        echo "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
    fi
}



# =====================================================================================
# =========================移动最新源jar包到Dockerfile所在目录=========================
# =====================================================================================


 
# 查找源jar文件名,进行重命名,最后将源文件移动到Dockerfile文件所在目录
function transfer(){
   
   
    echo "=========================>>>>>>>源文件完整地址为 $SOURCE_JAR_PATH"

  
    echo "=========================>>>>>>>重命名源文件"
        mv $SOURCE_JAR_PATH  $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar

    echo "=========================>>>>>>>最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 迁移至 $BASE_PATH"
        cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH 

    echo "=========================>>>>>>>迁移完成Success"

}
 


# =====================================================================================
# ==================================构建最新镜像=======================================
# =====================================================================================


 
# 构建docker镜像
function build(){
  
    # 无论镜像存在与否,都停止原容器服务,并移除原容器服务
    echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"
    docker stop $CID

    echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
    docker rm $CID

    # 无论如何,都去构建新的镜像
    if [ -n "$IID" ]; then
        echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID"


        echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID"
        docker rmi $IID

        echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->"
        cd $BASE_PATH
        docker build -t $SERVER_NAME .
        echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->"

    else
        echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->"


        cd $BASE_PATH
        docker build -t $SERVER_NAME .
        echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->"
    fi
}
 

# =====================================================================================
# ==============================运行docker容器,启动服务===============================
# =====================================================================================




# 运行docker容器
function run(){
    backup
    transfer
    build

    docker run --name $SERVER_NAME -itd --net=host -v /etc/localtime:/etc/localtime:ro  -v /etc/timezone:/etc/timezone:ro  $SERVER_NAME 

}
 
# 入口
run

shell脚本命令

OK,到这里基本的任务已经新建成功,至于后续的两个步骤,根据自己的需求自行配置,没有难度的。

点击应用,保存。

测试

测试push事件触发自动化构建和部署,点击test下拉选择push events,出现HTTP 200表示OK了。

测试webhook

回到Jenkins可以看到任务列表,查看构建信息等。

构建信息

待Jenkins构建成功之后,在服务器上执行命令:docker ps,可以看到我们启动起来的 SpringBoot 容器:

docker启动的容器

在浏览器输入:http://服务器ip:端口/ 即可访问刚自动部署的项目:

运行成功

配置邮件通知

完成基于jenkins的持续集成部署后,任务构建执行完成,测试结果需要通知到相关人员(这个邮件通知根据自己需求选择添加,非必须)。

安装邮件插件

由于Jenkins自带的邮件功能比较鸡肋,因此这里推荐安装专门的邮件插件,不过下面也会顺带介绍如何配置Jenkins自带的邮件功能作用。

点击系统管理 ——> 插件管理 ——> 可选插件:

安装邮件插件

选择Email Extension Plugin插件进行安装,安装好之后重启Jenkins。

邮件插件

系统设置

点击系统管理 ——> 系统配置,进行邮件配置:

系统配置

设置Jenkins地址和管理员邮箱地址

jenkins-location配置

设置发件人等信息

这里的发件人邮箱地址切记要和系统管理员邮件地址保持一致(当然,也可以设置专门的发件人邮箱,不过不影响使用,根据具体情况设置即可)

发件人信息

SMTP邮件协议

配置邮件内容模版

邮件模板

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>  
</head>  
  
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"  
    offset="0">  
    <table width="95%" cellpadding="0" cellspacing="0"  style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">  
        <tr>  
            本邮件由系统自动发出,无需回复!<br/>  
            各位同事,大家好,以下为${PROJECT_NAME}项目构建信息</br> 
            <td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></td>   
        </tr>  
        <tr>  
            <td><br />  
            <b><font color="#0B610B">构建信息</font></b>  
            <hr size="2" width="100%" align="center" /></td>  
        </tr>  
        <tr>  
            <td>  
                <ul>  
                    <li>项目名称 : ${PROJECT_NAME}</li>  
                    <li>构建编号 : 第${BUILD_NUMBER}次构建</li>  
                    <li>触发原因: ${CAUSE}</li>  
                    <li>构建状态: ${BUILD_STATUS}</li>  
                    <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>  
                    <li>构建  Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>  
                    <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>  
                    <li>项目  Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>  
                </ul>  

<h4><font color="#0B610B">失败用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/>

<h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>
<hr size="2" width="100%" />
<ul>
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>

            </td>  
        </tr>  
    </table>  
</body>  
</html>

设置邮件触发机制

邮件触发机制

上面的几步完成后,点击应用,保存即可。

配置Jenkins自带的邮件功能

配置内容如下,和Email Extension Plugin插件同样的配置,可以勾选 通过发送测试邮件测试配置 按钮来测试配置是否成功发送邮件,如下图:

自带的邮件功能

完成上面的系统设置后,点击应用保存即可。

项目配置

在完成系统设置后,还需要给需要构建的项目进行邮件配置。

进入项目配置界面

进入新建的项目界面,点击配置按钮,进入系统配置页面。

进入项目配置

配置构建设置模块

点击上方的 构建设置 选项,配置内容如下:

构建设置

配置构建后操作模块

点击上方的 构建后操作 选项,添加构建后操作步骤 Editable Email Notification,配置内容如下:

构建后操作1

接上图:

构建后操作2

配置内容默认即可,邮件内容类型可以根据自己的配置选择,收件人列表可以从前面的系统设置中默认收件人选项配置。

构建触发邮件测试

如下图,为我收到的测试邮件,邮件内容可以通过系统设置里面进行个性化的配置,可参考我上面的模板,或者自定义即可。

构建触发邮件成功

注意

(1)shell脚本中需要的文件夹没有则自建(不用完全跟我一样)。

(2)Dockerfile需和jar包放到同一目录下,附上我使用的Dockerfile文件内容:

FROM jdk1.8
MAINTAINER xuxu
COPY jenkins-docker-gitlab-springboot.jar jenkins-docker-gitlab-springboot.jar
CMD ["java","-jar","jenkins-docker-gitlab-springboot.jar"]

(3)如果没有基础 JDK 镜像可参照 这篇文章 完成。

(4)构建过程中可能提示没有权限操作文件夹,按照下面执行解决即可:

# 1. 查看所有容器
docker ps -a

# 2. 进入jenkins容器内部
docker exec -it jenkins /bin/bash

# 3. 查看当前操作用户是否是jenkins
whoami

# 4. 推出
exit

# 5. 以root用户进入jenkins容器内部
docker exec -it -u root jenkins /bin/bash

# 6. 切换到下面目录
cd /var/jenkins_home

# 7. 如果workspace可操作的用户不是jenkins用户需添加jenkins用户操作权限
ls -all

# 8. 添加jenkins用户操作权限
chown -R jenkins workspace

# 9. 添加目录操作权限
chmod 777 workspace

总结

经过我们多款软件的安装配置,我们逐步掌握了如何上床Spring Boot项目到Gitlab中,并使用Jenkins自动构建任务,另外依托于Docker,让这一切变得更加方便,希望大家都多多思考,让机器自动干活,减少我们IT从业人员的重复、繁琐的工作量。

10

评论区