这里不建议用windows的docker desktop,我没成功过
所以使用的是自己的linux服务器
这里所有操作的都在linux服务器上
1.安装docker,再用docker安装jenkins
安装docker,然后用docker安装jenkins。没学过docker的自己补一下,或者问ai
我这里使用的是尚硅谷雷丰阳老师的自己封装的jenkins镜像(好像是2024-6月份的时候封装的,现在的版本有点老,不过没事)。
(这个封装的jenkins镜像里面是一个docker + jenkins,我觉得非常好用,里面的docker.sock缺失了,所以需要自己挂载进去就好了)
sudo apt install -y docker-io
sudo apt install -y docker-compose
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker run -d \
--name myjenkins \
-p 8080:8080 \
-p 50000:50000 \
--restart=always \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/localtime:/etc/localtime:ro \
-e JAVA_OPTS="-Duser.timezone=Asia/Shanghai" \
leifengyang/jenkins:2.455-jdk21
2.进入jenkins主页
我们已经运行了jenkins了,映射在8080端口。我用的云服务器,别忘了安全组放行8080端口。
里面如果要填cider地址块,就是为0.0.0.0/0,不是0.0.0.0/24,别写错了。
(如果用了bt面板,自己还要在bt面板中设置一下)
然后自己 http://<云服务器ip>:8080 访问 jenkins吧
3.进入jenkins进行初始化
我快速说一遍。
1️⃣本地密码其实在第一次启动jenkins时看日志可以找到,docker logs myjenkins。
2️⃣选择安装推荐的插件(一定会失败的,因为这个版本太老了)。
3️⃣继续,设置第一个管理员用户就行。(看图)
4️⃣基本都是不要动,直接无脑下一步
4.更新jenkins和安装插件
1️⃣最重要的一步找到设置->插件管理->里面有一个更新jenkins的按钮,一定要先更新jenkins再说,需要重启。
2️⃣然后就是把之前installed plugins 全选更新一遍,也需要重启。
3️⃣在 available plugin 中搜索docker,下载前四个插件。搜索blueocean,下载第一个插件。下载完也要重启。
⚠️注意!!搜索的词不要缺一个少一个字母,否则搜出来结果不一样。
5.构建一个流水线(一个自动拉取git项目的流水线)
1️⃣新建任务,选中流水线,输入任务名,确定。
2️⃣点进去创建的任务,点击配置,进入配置页面
3️⃣下拉找到流水线, 把定义改成 Pipeline script from SCM
4️⃣然后SCM改成Git,Repository URL写gitee的仓库地址(像这样https://gitee.com/duoshuijiao/vitepress-jenkins-cicd-demo.git)
5️⃣如果报这个错了,那就是因为你这个仓库是私有的,要配gitee账号和密码。
Credentials下面的添加按钮 -> Jenkins -> 里面只要填写用户名、密码,ID、描述想写就写。
6️⃣Credentials下拉框选中刚才创建的登录凭证
最后保存即可了。这样你执行这个流水线的时候,jenkins会自动拉一遍代码了。
6.配置gitee仓库,让他检测有人push后,触发jenkins的流水线
1️⃣进入gitee仓库 -> 设置 -> WebHooks -> 添加WebHooks,(停在这个页面)
2️⃣去jenkins中,找到你刚刚新建的流水线任务,还是配置里面,找到triggers。如下图
记住这个JENKINS_URL
/view/all/job/demo/build?token=TOKEN_NAME
。
JENKINS_URL就是jenkins的访问地址,就是2.中的http://<云服务器ip>:8080。
TOKEN_NAME就是刚刚配的mytoken
3️⃣回到gitee页面,把这一串
http://xxxxx:8080/view/all/job/demo/build?token=mytoken,填进去
4️⃣所以要把jenkins的账号密码配在里面。我在 3.进入jenkins进行初始化 里面配的账号是admin,密码是123456。所以变成了这样:http://admin:123456@xxxxx:8080/view/all/job/demo/build?token=mytoken
5️⃣然后点击添加就可以了。
7.在你的git项目中写Jenkinsfile
这里项目根目录里写Jenkinsfile
不了解Jenkinsfile的,去学习把,这里给个示例文件。
// jenkinsfile 流水线文件
pipeline{
agent any
stages{
stage("编译项目并打包"){
steps{
echo "正在编译项目并打包......"
sh "ls -al"
withDockerContainer('node:24-alpine3.21'){
sh 'node -v'
sh 'npm config set registry https://registry.npmmirror.com/'
sh 'npm install'
sh 'npm run docs:build'
sh 'ls -al .vitepress/'
}
}
}
stage("打成一个压缩包(打包制品)"){
steps{
echo "正在打成一个压缩包(打包制品)......"
dir('.vitepress/dist'){
sh 'ls -al'
// 这里漏了要加版本号了
sh 'tar -zcvf docs.tar.gz *'
archiveArtifacts artifacts: 'docs.tar.gz',
allowEmptyArchive: true,
fingerprint: true,
onlyIfSuccessful: true
sh 'ls -al'
}
}
}
stage("部署"){
steps{
echo "正在部署项目......"
dir('.vitepress/dist'){
sh 'ls -al'
// dockerfile里面的ADD比起COPY有解压功能,尤其是tar.gz的压缩包
writeFile file: 'Dockerfile',
text: '''FROM nginx
ADD docs.tar.gz /usr/share/nginx/html/'''
sh 'docker build -t docs-app:latest . '
// 不要忘了删除新项目
sh 'docker rm -f app'
sh 'docker run -d -p 80:80 --name app docs-app:latest'
}
}
}
}
}
8.大功告成了
这样你每次 git push一遍,就会执行这个Jenkinsfile一遍。
接6.如果觉得把密码配在地址太不安全了,可以试试jenkins 的apikey
只要自己去全局安全配置了里面,拿出apikey,然后把 “6.” 中地址中的123456改成这个apikey,也是可以的。我自己用的是这个
http://admin:11535cb6bdc285ddbde50b90d0cf685490@xx.xx.xx.xx:8080/view/all/job/demo/build?token=mytoken
jenkinsfile里面有用到很多插件的语法,jenkins安装了这些插件,自带文档,自己查阅就好。