使用Jenkins完成Gitlab项目自动化部署流程学习笔记

1.Jenkins安装

1
2
3
4
5
6
7
8
9
>> sudo docker run -u root -d --name jenkins \
-p 8088:8080 -p 50000:50000 \
-v /data/project/jingyu/jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /etc/localtime:/etc/localtime:ro \
-e TZ=Asia/Shanghai \
--privileged=true \
jenkins/jenkins:lts
  • 可选:--rm:关闭时自动删除docker容器;

2.Jenkins页面访问

  • (1) 访问地址为:<服务器地址>:8088,需要输入密码,密码存储位置为:/var/jenkins_home/secrets/initialAdminPassword
1
2
>> sudo docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
55d7a2adada24ad4abc1c10d60ca510a
  • (2) 配置代理:”Manage Jenkins” -> “System” -> “Http Proxy Configuration” -> “Setup” -> 配置代理地址”Server”(10.46.200.165)、端口”Port”(26382)及不代理”No Proxy Host”(localhost,127.0.0.1,10.124.132.*,10.46.500.165)后,”Submit”提交保存,最后重启一下容器:
1
>> sudo docker restart jenkins
  • (3) 安装中文插件:”Manage Jenkins” -> “Plugins” -> “Available Plugins” -> 搜索并安装”Localization: Chinese (Simplified)”和”Locale”插件

  • (4) 设置中文界面:”Manager Jenkins” -> “Appearance” -> “Default Language” -> Chinese(China)-zh_CN” 并勾选”Ignore browser preference and force this language to all users”

  • (5) 安装一些必备插件:”Publish Over SSH”,”GitLab”, “Git”, “Pipeline”, “Maven Integration”, “Docker”

3.Jenkins自动化部署项目

3.1 创建项目

“New 任务” -> “构建一个自由风格的软件项目” -> 输入项目名称,如”deploy”

deploy_task

3.2 配置源码

  • [1] 找到”源码管理” -> “Git” -> “Repository URL”中输入项目的git地址
  • [2] 配置”Credentials” -> “添加” -> “Jenkins” -> 类型选择”Username with password”,并输入”用户名”和”密码” -> 选择”添加” -> “Credentials”选择刚添加的用户名和密码配置。

Credentials_step_1

Credentials_step_2

3.2 构建步骤

  • 找到”Build Steps” -> “增加构建步骤” -> “Execute shell” -> 将下面的脚本内容贴入到”命令”中 -> “Save” 保存后,开始构建即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash
set -e

# 正确的 CODE_PATH:Jenkins工作空间(宿主机路径)
CODE_PATH="/var/jenkins_home/workspace/xiongan-ai-agent-deploy" # 替换为你的Jenkins项目名
IMAGE_NAME="agent:v1.0"
CONTAINER_NAME="agent"

# 定义清理容器的函数(复用逻辑)
cleanup_container() {
local container_name=$1
# 检查容器是否存在
if docker ps -a --format "{{.Names}}" | grep -q "^${container_name}$"; then
echo "发现已存在容器 ${container_name},正在停止并删除..."
# 停止容器(如果容器正在运行)
docker stop ${container_name} || true
# 删除容器(忽略删除失败的情况)
docker rm ${container_name} || true
echo "容器 ${container_name} 清理完成"
else
echo "容器 ${container_name} 不存在,无需清理"
fi
}

# 进入宿主机的docker目录(Jenkins拉取代码后,docker目录就在这个路径下)
echo "开始构建镜像 ${IMAGE_NAME}..."
cd ${CODE_PATH}/docker || { echo "docker目录不存在"; exit 1; }

# 构建镜像(宿主机执行,用宿主机的dockerfile)
# 注意使用--build-arg配置代理,或者使用`--network host`配置直连模式
docker build \
--build-arg http_proxy=http://10.46.200.165:26382 \
--build-arg https_proxy=http://10.46.200.165:26382 \
-t ${IMAGE_NAME} .

# 第一步:清理已存在的同名容器(关键步骤)
cleanup_container ${CONTAINER_NAME}

# 第二步:启动新容器:挂载宿主机代码路径到容器内
docker run -itd --name ${CONTAINER_NAME} \
--net=host --ipc=host --shm-size 16g \
--privileged=true --cap-add=SYS_PTRACE \
-v /data/project/jingyu/jenkins-data/workspace/xiongan-ai-agent-deploy:/app/xiongan-ai-agent \
${IMAGE_NAME}

# 第三步:容器内执行脚本:用容器内的映射路径
docker exec -i ${CONTAINER_NAME} bash -c "cd /app/xiongan-ai-agent && bash ./scripts/start.sh"

echo "脚本执行完成!容器 ${CONTAINER_NAME} 已启动并执行启动脚本"

参考资料