05-DevOps-Jenkins自动拉取构建代码

新建Gitlab仓库

先在Gitab上创建一个代码仓库,选择创建空白项目

安装说明进行填写,然后点击创建项目

创建好的仓库是空的,什么都没有

新建一个springboot项目,用于代码上传使用。

只是为了测试代码上传功能,所以代码很简单,写一个控制器类,然后返回一个字符串。

代码编写完成,使用Git完成代码的提交。

选中项目文件夹,右键,选择Git,然后选择提交文件夹,如下图:

把显示模式改为文件夹显示

选中src文件夹中的内容和pom.xml文件,点击提交

到这里为止,把代码提交到了本地的仓库中,现在需要把代码上传到远程仓库(前面已经搭建好的GitLab)

下面开始向远程仓库进行代码的提交

配置远程仓库地址

输入远程仓库的地址URL

配置好远程仓库地址后,点击push

输入Gitlab的用户名和密码

用户名:root

密码:12345678@ (密码是在创建Gitlab时自己设置的)

等待片刻,idea右下角会显示已经将代码提交到远程仓库。

打开Gitlab的项目页面,切换到master分支

就可以看到刚才提交的代码

到此,完成了Gitlab新仓库的创建及代码提交到Gitlab仓库中。

使用Jenkins完成代码的自动拉取

在Jenkins中新建一个任务

自己定义一个名称(不需要与Gitlab完全一致),选择自由风格。

配置完成,点击应用,保存。

回到Jenkins首页,就可以看到刚才创建的任务。

点击任务名称,进入到任务中,选择构建任务

构建过程中,左下角会显示构建的进度条

构建完成

点击这条记录,选择控制台输出,就能看到具体的执行过程。

验证下Jenkins是否真正的拉取到了文件,进入Jenkins所在的服务器(192.168.1.10),找到/var/jenkins/workspace目录,看里面是否有Jenkins创建的工程文件夹(myproject-ci)

进入到工程文件夹里面,看是否有上传的代码文件

到此,Jenkins已经成功拉取到了Gitlab仓库中的代码文件。

说明:这里为什么能够在宿主机上(而不是Jenkins容器内部)看到Jenkins工程,是因为前面已经将/var/jenkins 目录挂载到Jenkins容器内部了。Jenkins操作的实际就是宿主机上文件。

Jenkins就是把原来人工要操作的命令,现在由Jenkins帮助我们自动构建。

在Jenkins中对代码进行编译

前面只是把源代码拉取到了Jenkins工程中,如果要变成产出物,还需要对源代码进行编译操作。

在myproject-ci工程中,找到配置

在Build中选择执行shell

sh /usr/local/maven/bin/mvn package

shell脚本说明,使用maven来执行package命令,将源代码编译,自动测试,并打包,形成jar文件,这个过程由maven自动完成。

填写完成,点击应用、保存

点击立即构建

通过查看构建的控制台,确实构建是否成功。

最后出现SUCCESS表示成功

出现问题并解决(如果没有问题,则跳过这个步骤)

在构建的时候,发生了错误,无法访问到阿里云仓库,报错信息如下图:

针对这个问题,排查了一下,大概原因是用macvlan网络模式导致的。尝试进行修复,并没有解决网络问题。

最后决定不使用macvlan,使用默认的桥接网络模式。

执行如下脚本,将Gitlab和Jenkins的网络模式均改为默认网络模式,不使用macvlan。

0.通过docker ps命令,找到Gitlab和Jenkins的容器ID

  1. 停止并删除当前容器(注意是两个容器ID放到一行 中间是空格)

docker stop 3e982db0c15f 707d31917085

docker rm 3e982db0c15f 707d31917085

  1. 使用bridge网络模式重新创建GitLab容器

docker run -d --name gitlab \

--hostname gitlab.example.com \

--restart=always \

-p 83:80 -p 443:443 -p 2222:22 \

-v /etc/gitlab:/etc/gitlab \

-v /var/log/gitlab:/var/log/gitlab \

-v /var/opt/gitlab:/var/opt/gitlab \

gitlab/gitlab-ce

  1. 使用bridge网络模式重新创建Jenkins容器

docker run -d --name jenkins \

--restart=always \

-p 8083:8080 -p 50000:50000 \

-v /var/jenkins/:/var/jenkins_home/ \

-v /usr/local/jdk:/usr/local/jdk \

-v /usr/local/maven:/usr/local/maven \

-e JENKINS_UC=https://mirrors.cloud.tencent.com/jenkins/ \

-e JENKINS_UC_DOWNLOAD=https://mirrors.cloud.tencent.com/jenkins/ \

jenkins/jenkins:2.263.1

  1. 获取GitLab容器的IP地址

GITLAB_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' gitlab)

  1. 配置Jenkins容器使其能够访问GitLab

docker exec -u 0 -it jenkins bash -c "echo '$GITLAB_IP gitlab.example.com gitlab' >> /etc/hosts"

  1. 测试连接

测试Jenkins容器能否访问互联网

docker exec -it jenkins ping -c 4 8.8.8.8

测试Jenkins容器能否访问GitLab

docker exec -it jenkins ping -c 4 gitlab.example.com

7.在Jenkins项目配置中将Git仓库URL从http://192.168.1.240/root/myproject-ci更改为http://gitlab.example.com/root/myproject-ci

通过以上操作,把原来的容器删掉,基于原有的docker镜像,重新创建了新的Gitlab容器和Jenkins容器。

上面的脚本执行完毕后,Gitlab容器和Jenkins容器就没有自己独立的ip了(因为不是macvlan模式)。

Gitlab访问地址:http://192.168.1.10:83/

Jenkins访问地址:http://192.168.1.10:8083/

用户名和密码还是之前的,Gitlab:root/123456@ Jenkins:root/root

再次点击构建,成功拉取到了依赖,完成打包的操作。

相关推荐
我命由我1234518 分钟前
Spring Cloud - Spring Cloud 微服务概述 (微服务的产生与特点、微服务的优缺点、微服务设计原则、微服务架构的核心组件)
java·运维·spring·spring cloud·微服务·架构·java-ee
ZHE|张恒1 小时前
使用 Docker 容器测试端口开放性
运维·docker·容器
一吃就胖的1 小时前
【给服务器安装服务器安装nacos】
java·运维·服务器
zhaotiannuo_19981 小时前
虚拟机安装ikuai系统相关配置
运维·服务器·性能优化
Doro再努力1 小时前
Linux01:基础指令与相关知识铺垫(一)
linux·运维·服务器
Cyan_RA92 小时前
Linux 远程Ubuntu服务器扩展硬盘后,将/home目录移动到新的硬盘空间上(把新硬盘的分区挂载到/home目录) 教程
linux·运维·ubuntu
七宝大爷2 小时前
深度解析英伟达DGX与HGX服务器——从架构差异到场景选择
运维·服务器·架构
wanhengidc2 小时前
服务器的安全性如何?
运维·服务器·安全·游戏·智能手机
taxunjishu2 小时前
DeviceNet 转 MODBUS TCP:倍福 CX 系列 PLC 与 MES 系统在 SMT 回流焊温度曲线监控的通讯配置案例
运维·人工智能·物联网·自动化·区块链
王嘉俊9252 小时前
DevOps 与 部署入门:加速软件交付与运维的实践指南
运维·devops