Jenkins+gitlab持续集成

之前我们已经部署了k8s和harbor仓库,本次来部署下jenkins和gitlab实现持续集成。

概念

持续集成是开发团队通过将代码的不同部分集成到共享存储库中,并频繁地进行构建和测试,以确保代码的一致性和稳定性。

流程
在现在的开发模式中,一般的项目,协同开发是离不开的,这就涉及到多个开发人员编写处理自己负责的功能模块或者某些开发人员共同负责一个模块。于是,通过版本控制系统可以将各个开发人员的代码集成在该共享存储库里,在存储库里,每个开发人员根据需求的不同来创建对应的分支,在完成需求后,每个人都需要提交合并将开发分支代码集成在一起,这就需要解决代码冲突,并且如何除了code review之外如何确保这些更改对应用没有产生影响,一旦提交请求合并到主分支,自动化构建工具就会根据流程自动编译构建安装应用,并执行单元测试框架的自动化测试来校验提交的修改。

机器规划如下

服务器名称IP地址配置
jenkins21110.0.0.2112核,4GiB,系统盘 20GiB
gitlab21210.0.0.2124核,4GiB,系统盘 20GiB

一、部署jenkins

1.下载jenkins

https://mirrors.jenkins-ci.org/debian/

2.准备jenkins部署环境

1 部署Jenkins的秘钥
[root@jenkins211 ~]# sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
    https://pkg.jenkins.io/debian/jenkins.io-2023.key

2 添加Jenkins的存储库
[root@jenkins211 ~]# echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
    https://pkg.jenkins.io/debian binary/ | sudo tee \
    /etc/apt/sources.list.d/jenkins.list > /dev/null

3 安装JRE环境(在线安装很慢,一般提前下载好jdk)
[root@jenkins211 ~]# sudo apt-get update
  sudo apt-get install fontconfig openjdk-17-jre
  sudo apt-get install jenkins  

4 创建jdk安装目录,解压到指定目录
[root@jenkins211 ~]# mkdir -pv /softwares
[root@jenkins211 ~]# tar xf jdk-17_linux-x64_bin.tar.gz -C /softwares/


5 配置jdk环境变量
[root@jenkins211 ~]# vim .bashrc
...
export JAVA_HOME=/softwares/jdk-17.0.8
export PATH=$PATH:$JAVA_HOME/bin

[root@jenkins211 ~]# source .bashrc 

6 验证jdk是否生效
[root@jenkins211 ~]# java --version
openjdk 17.0.13 2024-10-15
OpenJDK Runtime Environment (build 17.0.13+11-Ubuntu-2ubuntu122.04)
OpenJDK 64-Bit Server VM (build 17.0.13+11-Ubuntu-2ubuntu122.04, mixed mode, sharing)

3.部署jenkins

安装jenkins
[root@jenkins211 ~]# dpkg -i jenkins_2.489_all.deb 
# apt-get install jenkins #这种在线方式安装较慢,不建议。

修改jenkins的启动脚本并重启服务
[root@jenkins211 ~]# vim /lib/systemd/system/jenkins.service
......
User=root
Group=root

...
Environment="JENKINS_HOME=/var/lib/jenkins"
# 找到上面一行后添加如下一行
Environment="JAVA_HOME=/oldboyedu/softwares/jdk-17.0.8"

4.访问jenkins地址

http://10.0.0.211:8080/login?from=%2F

5.查看密码

[root@jenkins211 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
88259fc092c34ded983b6917872****d

6.安装jenkins插件

7.创建用户

好啦,就这样jenkins就简简单单部署完成了

8.修改时区

[root@jenkins211 ~]# ln -svf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
'/etc/localtime' -> '/usr/share/zoneinfo/Asia/Shanghai'

9.修改jenkins软件源

[root@jenkins211 ~]# sed -i.bak 's#updates.jenkins.io/download#mirror.tuna.tsinghua.edu.cn/jenkins#g' /var/lib/jenkins/updates/default.json

10.修改搜索引擎

[root@jenkins211 ~]# sed -i 's#www.google.com#www.baidu.com#g' /var/lib/jenkins/updates/default.json

11.替换jenkins国内下载地址

 拉到最下面替换url

将升级站点URL替换成国内镜像地址
https://mirror.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

12.重新登录jenkins

http://10.0.0.211:8080/restart

二、部署gitlab

参考地址:https://about.gitlab.com/install/#ubuntu

1. 安装并配置必要的依赖项

apt-get update
apt-get install -y curl openssh-server ca-certificates tzdata perl

2.安装 Postfix

apt-get install -y postfix

3.添加 GitLab 包仓库并安装包

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

4.安装 GitLab 包

#url替换成自己本机的ip地址
EXTERNAL_URL="http://10.0.0.212" apt-get install gitlab-ee

#也可以选择离线部署
https://packages.gitlab.com/gitlab/gitlab-ce

5.查看密码

[root@gitlab212 ~]# cat /etc/gitlab/initial_root_password
....
Password: 8Et747zZeK0xKnx4gJ03HP+5MQ00yv4v3rzjy1a***=
....

6.登录

账号:root
密码:查看生成的密码

7.设置语言

点击偏好设置

选择中文-->保存

8.开启本地网络请求

三、gitlab集成jenkins

1.创建群组

2.新建项目

3.添加ssh密钥

服务器和代码仓库连接方式有两种

第一种: 基于用户名和密码的方式连接

第二种: 基于SSH免秘钥方式(和命令行的SSH免秘钥相同)

我们使用基于免秘钥方式: 方便+安全性高

[root@gitlab212 ~]# ssh-keygen     #生成密钥对
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:GMd0qYCfisI7YgnL9gaTOvhSg9VWYVOtJ/ZmClhYCPc root@gitlab212
The key's randomart image is:
+--[ED25519 256]--+
|  ...o+oo...     |
|   .oo++ .o      |
|   . =Eooo       |
|  . + ++= .      |
|.o.o +..S+       |
|+=+ o .   +      |
|=+=.   . +       |
|BB .    .        |
|++=.             |
+----[SHA256]-----+
[root@gitlab212 ~]# 
[root@gitlab212 ~]# ll .ssh/
total 16
drwx------ 2 root root 4096 Dec 17 07:57 ./
drwx------ 4 root root 4096 Dec 15 12:01 ../
-rw------- 1 root root    0 Jul 23 16:40 authorized_keys
-rw------- 1 root root  411 Dec 17 07:57 id_ed25519        #私钥
-rw-r--r-- 1 root root   96 Dec 17 07:57 id_ed25519.pub    #公钥
[root@gitlab212 ~]# cat .ssh/id_rsa.pub 
cat: .ssh/id_rsa.pub: No such file or directory
[root@gitlab212 ~]# cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILkNNA0/prl380e574O6+cfOSOAbpeJl+zhEdS5e58 root@gitlab212

 4.将公钥贴近gitlab

添加公钥

 4.推送代码

配置邮箱

git config --local user.name "liangjh"
git config --local user.email "3101306637@qq.com"

创建仓库

#上传代码到服务器
[root@gitlab212 project]# pwd
/root/project
[root@gitlab212 project]# ll
total 228
drwxr-xr-x 6 root root  4096 Dec 17 08:09 ./
drwx------ 5 root root  4096 Dec 17 08:06 ../
-rw-r--r-- 1 root root 16458 Jun 13  2019 about.html
-rw-r--r-- 1 root root 20149 Jun 13  2019 album.html
-rw-r--r-- 1 root root 19662 Jun 13  2019 article_detail.html
-rw-r--r-- 1 root root 18767 Jun 13  2019 article.html
-rw-r--r-- 1 root root 18913 Jun 13  2019 comment.html
-rw-r--r-- 1 root root 16465 Jun 13  2019 contact.html
drwxr-xr-x 2 root root  4096 Sep 19  2022 css/
drwxr-xr-x 7 root root  4096 Dec 17 08:07 .git/
drwxr-xr-x 5 root root  4096 Sep 19  2022 images/
-rw-r--r-- 1 root root 29627 Jun 29  2019 index.html
drwxr-xr-x 2 root root  4096 Sep 19  2022 js/
-rw-r--r-- 1 root root 24893 Jun 13  2019 product_detail.html
-rw-r--r-- 1 root root 20672 Jun 13  2019 product.html


【此处非必要操作】
git clone git@10.0.0.212:ops/project.git
cd project
git switch --create master

#提交全部代码到缓存区
[root@gitlab212 project]# git add .    

#提交到远程仓库
[root@gitlab212 project]# git commit -m "第一次提交"

#查看分支
[root@gitlab212 project]# git branch

#推送到master分支
[root@gitlab212 project]# git push -u origin master

5.gitlab查看

四、配置jenkins和gitlab免密

1.jenkins生成密钥对

[root@jenkins211 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:8f0e/2XSZCdAGULp+LEkvVjeFo7YVJWv7HDFQDzfi1I root@jenkins211
The key's randomart image is:
+---[RSA 3072]----+
|         .o.o*o. |
|          .oo =  |
|        .+ ..  *.|
|        ooB..E  *|
|        S@.Boooo=|
|        o B.=o+*.|
|           ..++ +|
|             ..=.|
|              . +|
+----[SHA256]-----+
[root@jenkins211 ~]# 
[root@jenkins211 ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCrTMTf0oqtW7GktgZBdhqkjCBp2xGCcGeEo8ZcEKaN352TDMGKRI5O+0gAwUBj9HMAkPASJsejtTQIrT5jkBuW/8L5RXPDqCCyuzz1nkW/rPiyVvuAvvkQxFMBxL4w/AoDAhcsxpV73DCyYTrjQ8Tj7PfSViEUKZFpPbtroOZeCgCVa/mNPj7hGI2xUapKd0rdiGpXlDMPlD1uN9TET1WTj157QbYbgtsA6y+K2hjG97HHta0miovC4vqbaKQuohbYThbkwE5v6Ndjg8WSYjXEO6SDgemR6/c/JIyMPv1rNUitzl6dg4jykJ2pCTsemvFL7Vdjypbn9l0bPK8cq+mz0W8ZKLd2Ijqshj67SFWjFxJs0/yabg3jdMTdnYxRYdiG2vaMlAmtgGbXAUGXMqCzXNftmSpyqlSxGhfKLUC76LCqc4nBhqt2reN3L5yd/rzVZENdpok8cdV/dZag8ibzlgeqOL60ONThYTPZTACyw+U2K2HhqLmoCVDpYxU= root@jenkins211

 2.将公钥加入到gitlab

3.拉取测试

# 随便拉一个位置测试就行
[root@jenkins211 ~]# git clone git@10.0.0.212:ops/project.git

五、 jenkins推送代码到gitlab

1.jenkins创建项目

2.填写git地址

 3.jenkins构建

 构建完成之后,代码会拉取到jenkins工作目录中,在日志中查看工作目录的位置

 

 服务器查看,代码已经成功拉取到jenkins工作目录。

[root@jenkins211 test]# pwd
/var/lib/jenkins/workspace/test
[root@jenkins211 test]# ll
total 228
drwxr-xr-x 6 root root  4096 Dec 17 17:22 ./
drwxr-xr-x 3 root root  4096 Dec 17 17:22 ../
-rw-r--r-- 1 root root 16458 Dec 17 17:22 about.html
-rw-r--r-- 1 root root 20149 Dec 17 17:22 album.html
-rw-r--r-- 1 root root 19662 Dec 17 17:22 article_detail.html
-rw-r--r-- 1 root root 18767 Dec 17 17:22 article.html
-rw-r--r-- 1 root root 18913 Dec 17 17:22 comment.html
-rw-r--r-- 1 root root 16465 Dec 17 17:22 contact.html
drwxr-xr-x 2 root root  4096 Dec 17 17:22 css/
drwxr-xr-x 8 root root  4096 Dec 17 17:22 .git/
drwxr-xr-x 5 root root  4096 Dec 17 17:22 images/
-rw-r--r-- 1 root root 29627 Dec 17 17:22 index.html
drwxr-xr-x 2 root root  4096 Dec 17 17:22 js/
-rw-r--r-- 1 root root 24893 Dec 17 17:22 product_detail.html
-rw-r--r-- 1 root root 20672 Dec 17 17:22 product.html

4.配置webhook

jenkins需要安装gitlab插件

 勾选插件

 jenkins生成令牌

 gitlab添加令牌,填写jenkins url

gitlab测试钩子状态

 六、测试gitlab和jenkins持续集成

gitlab修改代码提交,这里我们直接加个p标签测试

[root@gitlab212 project]# vim about.html
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

        <p> 第一次提交 </p>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="applicable-device" content="pc,mobile" />
    <title>关于我们</title>

提交代码到gitlab

git add .

git commit -m "第一次提交"

git push origin master

jenkins观察是否自动拉取,这时候jenkins检测到gitlab分支有变动,自动拉取代码到了jenkins工作目录中了~

[root@jenkins211 test]# cat about.html | head -10
?<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

	<p> 第一次提交 </p>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

### 解决PyCharm无法加载Conda虚拟环境的方法 #### 配置设置 为了使 PyCharm 能够成功识别并使用 Conda 创建的虚拟环境,需确保 Anaconda 的路径已正确添加至系统的环境变量中[^1]。这一步骤至关重要,因为只有当 Python 解释器及其关联工具被加入 PATH 后,IDE 才能顺利找到它们。 对于 Windows 用户而言,在安装 Anaconda 时,默认情况下会询问是否将它添加到系统路径里;如果当时选择了否,则现在应该手动完成此操作。具体做法是在“高级系统设置”的“环境变量”选项内编辑 `Path` 变量,追加 Anaconda 安装目录下的 Scripts 文件夹位置。 另外,建议每次新建项目前都通过命令行先激活目标 conda env: ```bash conda activate myenvname ``` 接着再启动 IDE 进入工作区,这样有助于减少兼容性方面的问题发生概率。 #### 常见错误及修复方法 ##### 错误一:未发现任何解释器 症状表现为打开 PyCharm 新建工程向导页面找不到由 Conda 构建出来的 interpreter 列表项。此时应前往 Preferences/Settings -> Project:...->Python Interpreter 下方点击齿轮图标选择 Add...按钮来指定自定义的位置。按照提示浏览定位到对应版本 python.exe 的绝对地址即可解决问题。 ##### 错误二:权限不足导致 DLL 加载失败 有时即使指定了正确的解释器路径,仍可能遇到由于缺乏适当的操作系统级许可而引发的功能缺失现象。特别是涉及到调用某些特定类型的动态链接库 (Dynamic Link Library, .dll) 时尤为明显。因此拥有管理员身份执行相关动作显得尤为重要——无论是从终端还是图形界面触发创建新 venv 流程均如此处理能够有效规避此类隐患。 ##### 错误三:网络连接异常引起依赖下载超时 部分开发者反馈过因网速慢或者其他因素造成 pip install 操作中途断开进而影响整个项目的初始化进度条卡住的情况。对此可尝试调整镜像源加速获取速度或是离线模式预先准备好所需资源包后再继续后续步骤。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值