使用Docker+Jenkins自动构建部署
环境
Windows 10
Docker Version 18.06.1-ce-win73 (19507)
运行jenkins
运行jenkins 容器
1 | docker run -d --name lnmp-jenkins --user root -p 8080:8080 -p 50000:50000 jenkins /jenkins :2.165 |
1、请使用 root 账户运行,否则使用默认jenkins账户运行的时间将会有问题。
2、由于是Windows 环境,所以这里不建议挂在数据卷。否则将会有一些插件安装不成功的问题出现。如果非要挂在请求使用 Kitematic.exe
3、方便区分,请给容器给个名字
设置账户
通过http://you_host:8080
登陆查看
在Getting Started界面会需要初始的密码Unlock Jenkins。密码会在输出终端,也可根据页面提示到容器的jenkins_home中查找
查看密码请进入容器内查看
1 2 3 4 | docker exec -it lnmp-jenkins bash 密码文件路径 root@52c33b1a61ba:/ var /jenkins_home/secrets# |
有了密码,输入后安装建议的插件。完毕后,根据提示设置登陆账户。
安装Publish Over SSH插件
首页 -> 点击系统管理 -> 管理插件 ->可选插件 -> 过滤:ssh -> 选择Publish Over SSH插件,点击直接安装。
设置服务器SSH信息
首先在容器中生成rsa密钥:
1 2 3 4 5 6 | # 从宿主机客户进入容器,目前容器名lnmp-jenkins,也可通过docker ps 查看 $ docker exec -it lnmp-jenkins /bin/bash # 进入容器后建立.ssh目录,创建密钥文件私钥id_rsa,公钥id_rsa.pub ~ mkdir ~/.ssh && cd ~/.ssh ~ ssh-keygen -t rsa # 一直回车即可 |
添加公钥到宿主机
将id_rsa.pub中字符串添加到authorized_keys文件末尾,重启ssh服务sudo service ssh restart
注意宿主机是否开启ssh服务。
可以在容器终端中使用下面的命令添加到宿主机中。也可手动复制id_rsa.pub到宿主机的.ssh/authorized_keys文件中。
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<host> |
这里会要求我们输入远程服务器的密码。
修改服务器的ssh配置文件
ssh-server
配置文件位于:/etc/ssh/sshd_config
中,需要设置ssh-server
允许使用私钥/公钥对的方式登录,打开配置文件:
1 | vim /etc/ssh/sshd_config |
增加设置:
1 2 | RSAAuthentication yes PubkeyAuthentication yes |
然后重启ssh-server:
1 | sudo /etc/init.d/ssh restart |
设置完成之后就可以使用命令ssh <username>@<host>
直接登录服务器了,不需要再输入密码了。
项目配置
首先,新建一个任务。填写项目名称。 选择源码管理为:Git,填写项目库的URL。私有项目需要添加Git账号。
构建环境:选择Send files or execute commands over SSH after the build runs
,选择服务器,以及添加Exec command
。保存。
添加私钥
jenkins首页,系统管理 -> 系统设置 -> 下拉,找到Publish over SSH,填写Key 和 SSH Server -> 保存
高级选项能够配置ssh服务器端口和超时。Test可测试,显示success
配置成功。
配置webhook
配置webhook,实现自动部署
获取API tonken:首页 -> 用户 -> 选择当前的用户 -> 设置 -> 在API Tonken 项中点击Show API Token...
1 2 3 | http: //jenkins.tinywan.top/buildWithParameters?token=11216ee77000c52461ad16e5c4502427bb&cause=Cause+Text http: //jenkins.tinywan.top/job/Python%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/build?token=11216ee77000c52461ad16e5c4502427bb&cause=Cause+Text |
添加令牌:返回首页 -> 项目 -> 配置 -> 构建触发器 -> 选择 "触发远程构建" ->粘贴"API Token"内容到"身份验证令牌"
注意:这里的身份验证令牌是随意生成的。不是非必须后台生成的token api
测试结果
修改本地代码然后提交、Jenkins自动构建部署
查看构建日志记录
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 | 控制台输出 Started by remote host 192.30.252.37 with note: Cause Text Building in workspace /var/jenkins_home/workspace/Python 自动化测试 No credentials specified > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repository > git config remote.origin.url https: //github .com /Tinywan/t_log .git # timeout=10 Fetching upstream changes from https: //github .com /Tinywan/t_log .git > git --version # timeout=10 > git fetch --tags --progress https: //github .com /Tinywan/t_log .git +refs /heads/ *:refs /remotes/origin/ * > git rev-parse refs /remotes/origin/master ^{commit} # timeout=10 > git rev-parse refs /remotes/origin/origin/master ^{commit} # timeout=10 Checking out Revision 34f8b6beaf5ebc8f400e2da3432fd798c64acc83 (refs /remotes/origin/master ) > git config core.sparsecheckout # timeout=10 > git checkout -f 34f8b6beaf5ebc8f400e2da3432fd798c64acc83 Commit message: "使用Docker+Jenkins自动构建部署【Python自动化测试】" > git rev-list --no-walk fd1c8499da56077ce84accfd3d0b1843c859398a # timeout=10 SSH: Connecting from host [52c33b1a61ba] SSH: Connecting with configuration [www.tinywan.com] ... SSH: EXEC: STDOUT /STDERR from command [ pwd cd /home/www/data/t_log echo "jenkins before" >> jenkins.log git pull echo "jenkins after" >> jenkins.log] ... /home/www From https: //github .com /Tinywan/t_log fd1c849..34f8b6b master -> origin /master Updating fd1c849..34f8b6b Fast-forward README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) SSH: EXEC: completed after 4,005 ms SSH: Disconnecting configuration [www.tinywan.com] ... SSH: Transferred 0 file (s) Finished: SUCCESS |
参考
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2017-02-24 Visual Studio Code 教程之————入门篇