Jenkins基础
# Jenkins
# Docker部署
其他部署方式参考官方文档 (opens new window)
version: '3.8'
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
restart: unless-stopped
user: root
ports:
- "8082:8080" # Web UI
- "50000:50000" # Agent 连接端口
volumes:
- /opt/docker/jenkins/data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock # 允许 Jenkins 控制宿主机 Docker
2
3
4
5
6
7
8
9
10
11
12
13
14
docker compose up -d
访问ip:8080

#获取初始密码
docker exec cae8e9992019 cat /var/jenkins_home/secrets/initialAdminPassword
2

# 新建任务

填入任务名称,选择第一个item type 确定即可

在Build Steps 新增构建步骤,选择


输入
echo "hello jenkins"
点击save后点击立即构建

点击下面#1查看构建详情,看控制台输出


# 查看可用的环境变量列表
点击蓝色字体查看

引用

保存后构建查看控制台输出

# WorkSpace
创建一个test文件


这个文件在项目的workspace下可以查看对应容器内的(/var/jenkins_home/workspace/my-first-job/目录下)

# nodes
先下载Docker相关插件


docker run -d --restart=always -p 127.0.0.1:2376:2375 --network jenkins_default -v /var/run/docker.sock:/var/run/docker.sock alpine/socat tcp-listen:2375,fork,reuseaddr unix-connect:/var/run/docker.sock
docker inspect <container_id> | grep IPAddress

在jenkins填写容器的tcp://ip:port,然后测试链接

然后添加Docker Agent模板信息
Labels:docker-agent-alpine
Name:docker-agent-alpine
Docker Images:jenkins/inbound-agent

在这里可以配置私有的images,save保存。


编辑之前job的配置指定项目运行的节点
这里的标签填写之前节点的label即可

可以在控制台输出查看对应的日志

可以添加多个docker镜像模板,用来运行不同的项目

# pipeline
创建一个pipeline项目

在流水线出输入脚本内容,save保存构建

pipeline {
agent {
node {
label 'jenkins-agent-goes-here'
}
}
stages {
stage('Build') {
steps {
echo "Building.."
sh '''
echo "doing build stuff.."
'''
}
}
stage('Test') {
steps {
echo "Testing.."
sh '''
echo "doing test stuff.."
'''
}
}
stage('Deliver') {
steps {
echo 'Deliver....'
sh '''
echo "doing delivery stuff.."
'''
}
}
}
}
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
可以在此处查看每个阶段的构建日志

# Pipeline script from SCM
这种需要项目下建立一个Jenkinsfile文件
pipeline {
agent {
node {
label 'docker-agent-python'
}
}
triggers {
pollSCM '* * * * *'
}
stages {
stage('Build') {
steps {
echo "Building.."
sh '''
cd myapp
pip install -r requirements.txt --break-system-packages
'''
}
}
stage('Test') {
steps {
echo "Testing.."
sh '''
cd myapp
python3 hello.py
python3 hello.py --name=Brad
'''
}
}
stage('Deliver') {
steps {
echo 'Deliver....'
sh '''
echo "doing delivery stuff.."
'''
}
}
}
}
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


保存后然后构建

# Maven
先在主机上安装jdk环境
yum install java-21-openjdk -y
然后在下载maven相关插件

然后配置maven环境,可以自己下载,也可以自动安装。

配置maven镜像,在conf/settings.xml文件中
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>Aliyun Maven Central</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
2
3
4
5
6
然后建一个maven项目

配置Git

增加后续操作

export BUILD_ID=dontKillMe告诉 Jenkins 不要杀死这个任务启动的任何子进程
export BUILD_ID=dontKillMe
nohup java -jar target/*.jar &
2

# Publish Over SSH
先安装Publish Over SSH插件
配置相关主机信息





这时在测试机器上发现进程并未启动,查看log.out提示
nohup: 无法运行命令"java": 没有那个文件或目录
nohup: 无法运行命令"java": 没有那个文件或目录
2
3
但是在机器上执行
java -version
输出
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
2
3
这是因为配置环境变量是在/etc/profile配置的,需要在/etc/bashrc重新配置即可

登录 Shell(login shell)
执行的配置文件顺序:
/etc/profile → ~/.bash_profile → ~/.bashrc
非登录 Shell(non-login shell):
~/.bashrc → /etc/bashrc
Jenkins 执行 shell 脚本时,通常使用的是非登录 shell:所以配置/etc/profile不行
登录 Shell 启动
↓
/etc/profile ← 你的 Java 配置在这里,但 Jenkins 不会执行这里
↓
~/.bash_profile
↓
~/.bashrc
↓
/etc/bashrc ← Jenkins 会执行这里,所以配置在这里有效
2
3
4
5
6
7
8
9