最近入职一家新公司,公司只有我一个后端。从上一个后端那接手过来了整个项目,虽然薪资比较低,不过想着这次可以完全自由发挥,还是有利有弊的。
经过几天的熟悉项目之后,感觉每次需要在本地构建二进制文件,然后再通过ftp传到服务器再重启服务,整个流程相当耗时费力,为了偷懒,我开始使用jenkins去简化整个发布流程。
这篇博客是为了记录我本人的整个部署过程方便日后回忆。
前情提要
目前两台服务器
应用服务器:2核4g
Jenkins服务器:4核8g
仓库管理使用的是gitea,搭建在jenkins服务器。
不要问我为什么应用服务器的配置为什么这么低,我接手过来就是这样的,所以我不想把其他应用都部署到应用服务器,以免应用服务器资源不够。
安装Jenkins
我是直接使用docker-compose的方式进行的安装,主要是为了方便简单。
1 | services: |
直接使用docker-compose up -d
的方式启动Jenkins容器
此时可以通过http://<server-ip>:8080
的方式访问Jenkins的web页面,需要一个token,token就在日志里,可以直接使用docker logs <container-id>
的方式查看,里面有一个token填进去就OK了。
正常就注册账号密码,然后按照推荐插件进行安装就行,插件等待几分钟安装完成即可。
安装Go环境
因为是golang的项目,编译golang需要安装golang的环境,有两种方法可以安装。
第一种 直接在容器里安装golang环境,将go/bin/添加到环境变量种
第二种 在系统管理
的插件管理
中搜索并安装go
插件,然后全局工具配置
中找到Go安装
模块,点击Go安装
,设置别名和go的版本保存。最后在任务配置中的构建环境
模块勾选Set up Go programming language tools
并选择你需要的go版本
我这里是直接在容器内安装的golang环境,因为用第二种方式安装,下载安装包老是超时,我没去解决直接用最简单的方式跳过了。
构建任务配置
其他配置不再赘述,主要记录我的Build Step。
我目前分了三个Build Step方便区分。
构建
第一个步骤是用来构建一个二进制文件 设置构建的系统和架构
1 | 设置go proxy |
发布
第二个步骤是用来上传二进制文件到服务器/builds/go-admin/
文件夹中,文件名为go-admin
1 | 将编译好的go-admin传到应有服务器 |
在做这步之前需要在当前Jenkins容器中生成一个ssh_key:
1 | ssh-keygen -t rsa -b 4096 |
然后将.ssh/id_rsa.pub
的密钥复制到应用服务器的.ssh/authorized_keys
中
最后在系统管理
的凭据管理
中添加全局凭证 。
具体细节可以参考Jenkins远程传送以及执行远程命令
做这一步是为了ssh连接可以不用输入密码
部署
第三个步骤是通过ssh到应用服务器去部署。
在做这步之前需要完成以下步骤:
- 在
插件管理
中安装SSH
插件。 - 在
系统管理
的系统配置
中添加ssh相关配置。因为在第二步已经将ssh密钥添加到了应用服务器,所以可以直接连接
然后在任务配置中Build Steps选择Execute shell script on remote host using ssh
选择刚才设置的应用服务器,在Command
的输入框中填入对应的命令
1 | 进入go-admin项目的二进制归档目录中 |
总结
至此整个流程就走完了。服务是用supervisor
进行管理,没有使用docker,原因也是应用服务器配置较低。目前整个CI/CD流程能够跑通了,最起码我直接点个按钮就可以直接上线,so easy~