[{"data":1,"prerenderedAt":48},["ShallowReactive",2],{"content:\u002Farticles:3300":3},{"item":4,"md":15,"html":16,"menu":17,"excerpt":28,"related":29},{"title":5,"len":6,"tags":7,"id":9,"time":10,"modifyTime":11,"encrypt":12,"showComments":13,"customSlug":14},"jenkins+github配置CI\u002FCD",2698,[8],"运维",3300,1649186115521,1679559849202,false,true,"",null,"\u003Cblockquote data-marked-line=\"1\">\n\u003Cp data-marked-line=\"1\">本站访问有些慢，应该是国内的网络对vercel不友好。但是我有一台几乎闲置的华为云vps，于是尝试了一下配置本站的CI\u002FCD。记录过程。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch1 data-marked-line=\"3\">\u003Csup class=\"fake-head\" id=\"%E5%89%8D%E7%BD%AE%E6%9D%A1%E4%BB%B6\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E5%89%8D%E7%BD%AE%E6%9D%A1%E4%BB%B6\">前置条件\u003C\u002Fa>\u003C\u002Fh1>\u003Cul data-marked-line=\"4\">\n\u003Cli>\u003Cspan style=\"color: #0083ab\">服务器\u003C\u002Fspan>：centos8\u003C\u002Fli>\n\u003Cli>\u003Cspan style=\"color: #0083ab\">项目\u003C\u002Fspan>：需要nodejs编译的前端项目\u003C\u002Fli>\n\u003Cli>\u003Cspan style=\"color: #0083ab\">部署目标\u003C\u002Fspan>：nginx\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch1 data-marked-line=\"7\">\u003Csup class=\"fake-head\" id=\"%E8%BF%87%E7%A8%8B\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E8%BF%87%E7%A8%8B\">过程\u003C\u002Fa>\u003C\u002Fh1>\u003Col data-marked-line=\"8\">\n\u003Cli>\u003Cp data-marked-line=\"8\">安装jenkins。参照\u003Ca href=\"https:\u002F\u002Fwww.jenkins.io\u002Fdoc\u002Fbook\u002Finstalling\u002Flinux\u002F#red-hat-centos\" target=\"_blank\">官网介绍\u003C\u002Fa>，安装完成后，可以在\u003Ccode>http:\u002F\u002Fyourip:8080\u003C\u002Fcode>登入jenkins控制台，然后创建用户，安装推荐插件，等等。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp data-marked-line=\"9\">配置凭据。进入\u003Cem>Manage Credentials\u003C\u002Fem>界面，Url一般是\u003Ccode>http:\u002F\u002Fyourip:8080\u002Fcredentials\u003C\u002Fcode>，创建一个ssh凭据，Private Key字段需填写已经在\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsettings\u002Fkeys\" target=\"_blank\">github配置\u003C\u002Fa>过的ssh\u003Cstrong>密钥\u003C\u002Fstrong>，密钥位置一般在\u003Ccode>~\u002F.ssh\u002Fid_rsa\u003C\u002Fcode>。\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"ssh凭据\" title=\"ssh凭据\" style=\"width: 80% !important;\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002FnmA6RVIDUjPuoCO.png\"\u002F>\u003Csmall class=\"desc\">ssh凭据\u003C\u002Fsmall>\u003C\u002Fspan>\n接着新建一个secret text凭据，输入密码，用于等会配置webhook：\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"secret text凭据\" title=\"secret text凭据\" style=\"width: 80% !important;\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002FWSpv6LxMajUf5gI.png\"\u002F>\u003Csmall class=\"desc\">secret text凭据\u003C\u002Fsmall>\u003C\u002Fspan>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp data-marked-line=\"11\">配置NodeJS插件。进入\u003Cem>Plugin Manager\u003C\u002Fem>界面，Url一般是\u003Ccode>http:\u002F\u002Fyourip:8080\u002FpluginManager\u002Favailable\u003C\u002Fcode>，搜索并安装\u003Ccode>NodeJS Plugin\u003C\u002Fcode>，这是安装后的效果：\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"安装NodeJS插件\" title=\"安装NodeJS插件\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002FcBWjEFKUdn9XDst.png\"\u002F>\u003Csmall class=\"desc\">安装NodeJS插件\u003C\u002Fsmall>\u003C\u002Fspan>\n之后进入全局配置，Url一般是\u003Ccode>http:\u002F\u002Fyourip:8080\u002FconfigureTools\u003C\u002Fcode>，找到\u003Cstrong>NodeJS\u003C\u002Fstrong>字段，点击新增NodeJS按钮，输入别名、国内镜像、版本号、预装yarn，然后保存：\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"配置NodeJS插件\" title=\"配置NodeJS插件\" style=\"width: 80% !important;\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002FqysRNHjXLnF6iMW.png\"\u002F>\u003Csmall class=\"desc\">配置NodeJS插件\u003C\u002Fsmall>\u003C\u002Fspan>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\u003Cp data-marked-line=\"13\">现在正式开始配置项目。先创建一个freestyle项目，Url一般是\u003Ccode>http:\u002F\u002Fyourip:8080\u002Fview\u002Fall\u002FnewJob\u003C\u002Fcode>。进入配置界面，在\u003Cstrong>源码管理\u003C\u002Fstrong>栏，输入源码信息，选择刚刚创建的ssh凭据：\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"源码信息\" title=\"源码信息\" style=\"width: 80% !important;\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002FqijoPRmvO27B6n5.png\"\u002F>\u003Csmall class=\"desc\">源码信息\u003C\u002Fsmall>\u003C\u002Fspan>\n在\u003Cstrong>构建环境\u003C\u002Fstrong>栏，勾上\u003Cspan style=\"color: #0083ab\">GitHub hook trigger for GITScm polling\u003C\u002Fspan>，并输入刚刚配置好的NodeJS环境：\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"NodeJS信息\" title=\"NodeJS信息\" style=\"width: 80% !important;\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002FRm4YWFQ8zVITiet.png\"\u002F>\u003Csmall class=\"desc\">NodeJS信息\u003C\u002Fsmall>\u003C\u002Fspan>\n在\u003Cstrong>构建\u003C\u002Fstrong>栏，选择\u003Ccode>执行shell\u003C\u002Fcode>，输入shell信息：\u003C\u002Fp>\n\u003Cpre data-marked-line=\"17\" data-lang=\"bash\" data-shiki>\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">node\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> -v\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    # 输出node版本\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#56B6C2\">cd\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E06C75\"> $WORKSPACE\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    # 确保进入工作目录\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">yarn\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> install\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> --registry=https:\u002F\u002Fregistry.npm.taobao.org\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    # 执行yarn install\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">npm\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> run\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> generate\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    # 执行generate\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">rm\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> -rf\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> \u002Fdata\u002Fwww\u002Fblog\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    # 清空之前的数据\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">cp\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> -r\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> dist\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> \u002Fdata\u002Fwww\u002Fblog\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">    # 拷贝dist\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp data-marked-line=\"25\">到此已经配置完成，点击保存。可以在项目界面点击\u003Cstrong>立即构建\u003C\u002Fstrong>按钮，测试效果。\n5. 配置nginx和DNS。关于nginx基本配置和https证书，这里不细讲。如果已有nginx服务，只需加一项server字段(404重定向到\u002Findex.html)：\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"增加一项**server**字段\" title=\"增加一项**server**字段\" style=\"width: 80% !important;\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002FEHOKlgJd1u2IPnj.png\"\u002F>\u003Csmall class=\"desc\">增加一项\u003Cstrong>server\u003C\u002Fstrong>字段\u003C\u002Fsmall>\u003C\u002Fspan>\n配置DNS，我用的是dnspod免费套餐，可以让境外访问解析到vercel，默认解析到我们的服务器：\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"境内境外分流\" title=\"境内境外分流\" style=\"width: 80% !important;\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002FfBHUynhA2dcDFJv.png\"\u002F>\u003Csmall class=\"desc\">境内境外分流\u003C\u002Fsmall>\u003C\u002Fspan>\n6. 配置webhook。进入jenkins配置界面，Url一般是\u003Ccode>http:\u002F\u002Fyourip:8080\u002Fconfigure\u003C\u002Fcode>，找到\u003Cstrong>GitHub\u003C\u002Fstrong>-&gt;\u003Cstrong>Shared secrets\u003C\u002Fstrong>，选择第2步创建的secret text凭据，然后保存：\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"用于识别github的webhook\" title=\"用于识别github的webhook\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002F1XOp5rHcPtGDQ3Z.png\"\u002F>\u003Csmall class=\"desc\">用于识别github的webhook\u003C\u002Fsmall>\u003C\u002Fspan>\n打开项目github的配置界面，新建一个Webhook，Payload URL输入\u003Ccode>http:\u002F\u002Fyourip:8080\u002Fgithub-webhook\u002F\u003C\u002Fcode>，secret字段输入secret text凭据的密码，保存：\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"github webhook\" title=\"github webhook\" style=\"width: 80% !important;\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002Fv3YUISLbW2mJhuR.png\"\u002F>\u003Csmall class=\"desc\">github webhook\u003C\u002Fsmall>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Ch1 data-marked-line=\"30\">\u003Csup class=\"fake-head\" id=\"%E5%AE%8C%E5%B7%A5\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E5%AE%8C%E5%B7%A5\">完工\u003C\u002Fa>\u003C\u002Fh1>\u003Cp data-marked-line=\"31\">&emsp;&emsp;以上步骤基本配置好了CI\u002FCD，实际的工作流程如下：\u003C\u002Fp>\n\u003Col data-marked-line=\"32\">\n\u003Cli>用户推送代码到github。\u003C\u002Fli>\n\u003Cli>github携带secret，访问\u003Ccode>http:\u002F\u002Fyourip:8080\u002Fgithub-webhook\u002F\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>jenkins收到请求，开始执行构建命令，构建完成后，\u003Ccode>dist\u002F\u003C\u002Fcode>文件夹被复制到\u003Ccode>\u002Fdata\u002Fwww\u002Fblog\u002F\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>此时\u003Ccode>index.html\u003C\u002Fcode>等文件已经改变，网站已更新，用户访问网址可看到最新的构建。\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cblockquote data-marked-line=\"37\">\n\u003Cp data-marked-line=\"37\">\u003Cspan style=\"color: grey\">测试是偶尔会卡死，1C2G的服务器，要关掉内存大户mysql，才能带得动jenkins编译\u003Cimg src=\"\u002Fsticker\u002Faru\u002F2.png\" alt=\"sticker\"\u002F>\u003C\u002Fspan>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n",[18,22,25],{"size":19,"text":20,"url":21},"big","前置条件","%E5%89%8D%E7%BD%AE%E6%9D%A1%E4%BB%B6",{"size":19,"text":23,"url":24},"过程","%E8%BF%87%E7%A8%8B",{"size":19,"text":26,"url":27},"完工","%E5%AE%8C%E5%B7%A5",">本站访问有些慢，应该是国内的网络对vercel不友好。但是我有一台几乎闲置的华为云vps，于是尝试了一下配置本站的CI\u002FCD。记录过程。 前置条件 服务器：centos8 项目：需要nodejs编译的前端项目 部署目标：nginx 过程 安装jenkins。参照官网介绍，安装完成后，可以在http…",[30,40],{"item":31,"count":39},{"title":32,"len":33,"tags":34,"id":36,"customSlug":37,"time":38,"modifyTime":38,"showComments":13,"encrypt":12},"上手gitea actions记录",6059,[8,35],"nas",7909,"gitea-actions-setup",1770992638940,1,{"item":41,"count":39},{"title":42,"len":43,"tags":44,"id":45,"time":46,"modifyTime":47,"encrypt":12,"showComments":13,"customSlug":14},"使用Drone+docker配置本地轻量化CI\u002FCD",7292,[8],8346,1694238608081,1694594878863,1793351209757]