需要实现的需求很简单,写了一个项目, 主要开发语言php, 想要自动推送到自己nas服务器
使用Gitee
来管理代码, 没有架设 gitlab
主要是有点耗内存。
整个流程很简单,Gitee在接收到代码推送后,通过Webhook,可以通知到Jenkins,Jenkins拉去代码,并根据代码中的ansible配置,在编译步骤执行 ansible命令进行远程部署。
为了简单使用docker搭建的 ansible+jenkins
, 由于想使用 ssh 账号密码登录, 需要sshpass,所以自己弄了一个镜像 docker push ctwj/jenkins-ansible
正式开始配置
1. docker 容器创建
Docker 这里以威联通的ContainerStation
为例
![](https://img.haomeiwen.com/i5941869/98212c442c419b01.png)
![](https://img.haomeiwen.com/i5941869/e48276adaeefa4d5.png)
![](https://img.haomeiwen.com/i5941869/083688a6dd8488a7.png)
两个文件夹留空就行了, 默认配置文件没有的话,
https://github.com/ctwj/jenkins-ansible
在项目中下载默认配置文件。
上面所有步骤用命令行,其实就一个命令:
docker run -d -p 8080:8080 -p 50000:50000 -v /your/home/jenkins:/var/jenkins_home -v /you/ansible:/etc/ansible ctwj/jenkins-ansible
创建成功后, 访问 http://ip:18080
![](https://img.haomeiwen.com/i5941869/231f527467ef7d60.png)
登录进入容器, 查看文件
initialAdminPassword
jenkins@338e61346d48:/$ cat /var/jenkins_home/secrets/initialAdminPassword
6b75287bb5224c07834f993d6a61ea5b
jenkins@338e61346d48:/$
输入密码并继续
![](https://img.haomeiwen.com/i5941869/fe981e3aa21a4977.png)
选择安装推荐的插件
![](https://img.haomeiwen.com/i5941869/1f5377d5b316ecf9.png)
创建管理员
![](https://img.haomeiwen.com/i5941869/862e8eeb0b683b1d.png)
![](https://img.haomeiwen.com/i5941869/b2dcbfbacaa3eec6.png)
![](https://img.haomeiwen.com/i5941869/10612758845f23df.png)
使用配置的管理员账号密码登录
2. 配置
-
jenkins 配置 gitee 插件
安装完成后,在系统配置中进行配置
在证书令牌那添加一个证书令牌,其中私人令牌登录Gitee获取
Gitee插件配置完成。
-
jenkins 添加gitee项目,配置gitee webhook,使得代码更新通知jenkins
回到首页,创建一个新任务
General 页
源码管理页,添加一个账号密码
构建触发器页
这里生产一个 WebHook 密码, 需要在Gitee 配置
具体配置细节参考
https://gitee.com/help/articles/4193#article-header9 -
jenkins 项目的build配置, 使得编译完成后自动部署
其中命令是根据ansible命令和代码中ansible配置来的。
ansible-playbook -i ./playbooks/inventory/dev ./playbooks/deploy.yml
其中 -i 参数指定hosts,其中定义了部署的服务器
- ssh免密登陆配置
进入容器配置
参考:
https://www.jianshu.com/p/e4ac067f5649
![](https://img.haomeiwen.com/i5941869/0d61504cd47a6aa9.png)
- 代码中的 ansible 配置
# deploy.yml
- hosts: "bot"
gather_facts: true
remote_user: admin
roles:
- bot
指定 ansible hosts 为 bot
![](https://img.haomeiwen.com/i5941869/4582c3bbf78301e8.png)
其中 playbooks/inventory/dev 指定bot, 通过build配置中-i参数指定该文件。
![](https://img.haomeiwen.com/i5941869/95ed38e97668e249.png)
在 tasks 中指定部署动作
3. 最终效果
推送代码
D:\workspace_ued\TelegramPostBot (master -> origin)
λ git push origin master
Counting objects: 10, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 1010 bytes | 1010.00 KiB/s, done.
Total 10 (delta 4), reused 0 (delta 0)
remote: Powered By Gitee.com
To https://gitee.com/ctwj/TelegramPostBot.git
fe36da1..6540605 master -> master
jenkins 自动收到 webhooks 消息
![](https://img.haomeiwen.com/i5941869/d51185c2912171ac.png)
可以看到 由Gitee 自动 push过来的
![](https://img.haomeiwen.com/i5941869/2f7a4de536bd3966.png)
进入第二次构建,查看输出
![](https://img.haomeiwen.com/i5941869/dc787af4a31eadf8.png)
总结
最终实现了推送代码, 自动部署的功能, 对以后也是一种劳动力的解放,不需要登录服务器手动部署了。
网友评论