当前位置: 首页 > news >正文

网站开发制作公做静态网站成本

网站开发制作公,做静态网站成本,做AI免费网站,昌江县住房和城乡建设网站“ 阅读本文大概需要 19 分钟。 ”前段时间我更新了我的分布式爬虫管理框架—— Gerapy#xff08;话都说到这儿了打个广告#xff0c;跟繁琐的命令行说拜拜#xff01;Gerapy分布式爬虫管理框架来袭#xff01;#xff0c;哇#xff0c;哇#xff0c;就是#xff0c;哇… “ 阅读本文大概需要 19 分钟。 ”前段时间我更新了我的分布式爬虫管理框架—— Gerapy话都说到这儿了打个广告跟繁琐的命令行说拜拜Gerapy分布式爬虫管理框架来袭哇哇就是哇现在 DevOps 的理念可谓是相当火其中 CI/CD持续集成、持续部署是必不可少的环节。有了它们我们开发完软件之后一些测试、构建、部署的环节就可以自动化完成了。我开发的的这款分布式爬虫管理框架—— Gerapy代码也是放在了 GitHub 上面但在之前 GitHub 上面是缺少原生的 CI/CD 功能支持的可能需要根据第三工具或者 Webhook 等来配合实现项目的自动测试、构建和部署。比如我可能有这么一些需求•每次合并代码到 master 分支时想测试这个项目能否在各个版本的 Python 环境下正常安装和运行。•我为 Gerapy 新建了一个独立的 Repo叫做 Gerapy/Gerapy在 docs 文件夹下存放文档说明但我还另外新建了一个 Repo 专门用来存放文档叫做 Gerapy/Docs希望能把 Gerapy/Gerapy 的 docs 子文件夹下的内容整个自动同步到 Gerapy/Docs 这个 Repo 的根目录。•每次 Gerapy 发布新版本的时候自动构建 Docker 镜像并上传到 Docker Hub打上 latest 标签和版本号标签。•每次 master 分支提交代码的时候自动构建 Docker 镜像并上传到 Docker Hub打上 master 标签代表当前 master 分支版本。上面的功能之前有一部分工作是手工操作的有一部分是借助于第三方工具来自动操作的感觉并不是一个很好的解决方案在最近一段时间GitHub 上面上线了 Actions 功能它就是为 CI/CD 而生的和 GitHub 项目原生紧密结合。然而几个月以来一直处于内测阶段。就在 11 月 13 日GitHub Actions 功能正式上线了。上线之后我就开始正式使用这个功能了是真的香上面的四个需求我用 GitHub Actions 已经完全实现了自动化非常简单方便。接下来简单介绍下我的一些实现方式。GitHub Actions首先简单介绍下 GitHub Actions其官方介绍页面为https://github.com/features/actions介绍语如下Automate your workflow from idea to production. GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want.简而言之就是提供了一个高效易用的 CI/CD 工作流帮助我们自动构建、测试、部署我们的代码。另外它支持三大平台—— Linux、MacOS、Windows支持任何编程语言而且官方提供了许许多多的 Actions 库供我们直接使用帮助我们更快地搭建工作流。GitHub Actions 的官方文档可以见https://help.github.com/en/actions/automating-your-workflow-with-github-actions如果大家想好好研究下的话一定要好好看看。下面我就介绍我使用 GitHub Actions 实现上文所述的四个需求的方法。自动测试由于我开发的 Gerapy 是一个 Python Package因此我看重的是测试它是否可以在各个 Python 平台下安装和正常使用于是我新建了一个 GitHub Action它会自动在项目目录下生成一个 .github/workflows/*.yml 文件内容如下name: buildon: push: branches: - master - devjobs: test: runs-on: - ubuntu-latest strategy: max-parallel: 3 matrix: python-version: [3.5, 3.6, 3.7] steps: - uses: actions/checkoutv1 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-pythonv1 with: python-version: ${{ matrix.python-version }} - name: Install Dependencies run: | python -m pip install --upgrade pip pip install . - name: Run Gerapy run: | gerapy -v gerapy init cd gerapy gerapy migrate gerapy initadmin其实在这里一个 Action 就是一个 YAML 文件其后缀为 yml它规定了一系列语法规则我们根据它的语法规则写出一些工作流在符合一定条件时这些工作流会被触发自动执行。比如这里最开头on 就是监听某个事件其内容为 push意思就是当 push 代码的时候就会触发。再进一步地这里定义了两个分支 master 和 dev。这什么意思呢就是当我往 master 或者 dev 分支 push 代码的时候我们定义的工作流就会执行。下面的 jobs 就是工作流的定义了包括在什么平台运行具体执行什么步骤。比如这里 runs-on 我就定义了在 ubuntu-latest 版本上运行另外定义了一些并行策略和参数比如这里就定义了 Python 的三个版本参数在 3.5、3.6、3.7 版本上运行。下面的 steps 就是具体执行哪些步骤了。第一步和第二步我们可以看到它都有一个 uses 参数内容都为 actions 开头这就说明我们使用了 GitHub 提供的写好的 Action我们只需要引用它的名字就能使用了。这两步运行完毕之后Python 环境会被初始化同时会从 GitHub Clone Gerapy 项目代码到本地。在第三步和第四步就是我自定义的 Task 了这里自持直接写入 Shell 脚本。在这里我分了两步。第三步 Install Dependencies 就是安装 pip 和 Gerapy 安装包其中一句 pip install . 就是安装当前 Gerapy 目录下的内容到系统中安装完成之后就可以使用 gerapy 命令了。于是第四步 Run Gerapy 就是测试了 gerapy 命令的一些初始化使用包括初始化工作环境、数据库迁移、初始化账号等等当然还有更多比如运行某些测试运行服务等等这里我只把一些必要的内容写进去了。好基本内容就是这样。保存这个 Action命名为 build.yml它会保存为 .github/workflows/build.yml 文件。同时在保存的时候我们就相当于执行了一次 Push 任务这时候我们就可以看到这个 Action 已经启动了页面如下我们所定义的每一个步骤以及对应的执行结果都会显示在控制台中一目了然。可以看到这里初始化了三个版本的 Python 环境同时都运行了其中的测试流程。如果测试成功会打绿色的勾如果失败会提示红色的叉并有邮件提示。这样以来一些自动化的测试就完成了同步文档到新的 Repo接下来我这个需求可以说稍微有点奇葩了。写项目免不了的要写文档这里文档我是用 Sphinx 来写的可以借助于 ReadTheDocs 自动构建并分发到 readthedocs.io 上面类似这样子但文档的源代码我是放在了 Gerapy/Gerapy 这个 Repo 的 docs 文件夹向 Scrapy 看齐是这样子的但我想着还新建一个 Repo来单独存放文档比如我新建一个 Gerapy/Docs 这个 Repo我在 Gerapy/Gerapy docs 子文件夹下的内容可以被自动同步到 Gerapy/Docs 根目录下面这样我只需要往 Gerapy/Gerapy 上面提交代码docs 子文件夹下面的内容变了Gerapy/Docs 下面的内容也会跟着变。那这个能不能做到呢能我问你答快乐神仙自问自答法力无边这个流程可以分为四步•下载 Gerapy/Gerapy Repo 的源代码。•利用 git 的 subtree 命令将 docs 文件夹下的内容分离到新的分支。•将新分离的分支推送到 Docs 这个 Repo 下面。•推送 Docs 这个 Repo 到远程 Gerapy/Docs Repo。这里面就有一个关键地方那就是怎样无需密码将内容推送到远程 Gerapy/Docs 这个 Repo 下面当然就是 SSH 了。啊超爽der那 SSH 的话应该怎么设置呢我们首先要有一对公钥和私钥这个我们用 ssh-keygen 命令自己生成就好了。那接下来 Gerapy/Docs 里面需要存有公钥怎么办呢我们可以借助于 GitHub 提供的 Deploy Key 配置好公钥即可然后我们需要将私钥上传到 Action 所运行的虚拟机里面但我们又不能明文将其放在 yml 文件里面那这个怎么做到呢只需要将其配置到 Secrets 里面即可Action 是有权限访问到的嗯做好这两部分工作之后接下来完善一下 yml 文件就好了内容如下name: sync docson: push: branches: - masterjobs: sync: runs-on: ubuntu-latest steps: - name: Set SSH Environment env: DOCS_DEPLOY_KEY: ${{ secrets.DOCS_DEPLOY_KEY }} run: | mkdir -p ~/.ssh/ echo $DOCS_DEPLOY_KEY ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan github.com ~/.ssh/known_hosts chmod 700 ~/.ssh chmod 600 ~/.ssh/* git config --global user.email cqccuiqingcai.com git config --global user.name Germey - name: Sync Docs of Gerapy run: | cd /tmp git clone gitgithub.com:Gerapy/Docs.git docs cd docs git branch -D docs || true git push origin --delete docs || true git clone https://github.com/Gerapy/Gerapy.git gerapy cd gerapy git subtree split --prefixdocs --squash -b docs git checkout docs git push /tmp/docs docs:docs cd /tmp/docs git checkout docs git checkout -b master || git checkout master || true git reset --hard docs git push origin master --force可以看到这里主要就分了两步。第一部分就是设置虚拟机的 SSH 环境这里 secrets.DOCS_DEPLOY_KEY 就是我们刚才在 Secrets 里面定义的私钥对应的运行命令就是将私钥添加到 ~/.ssh/id_rsa 里面。第二部分就是分离 docs 文件夹到新的分支然后将其上传到新的 Repo 下了。那么这里有两条比较关键的命令git subtree split --prefixdocs --squash -b docs这条命令就是将 docs 文件夹的内容分离到一个新的分支的根目录下新的分支的名称为 docs。git push /tmp/docs docs:docs这条命令就是将本地的分支推送到另外一个本地 Repo 下注意这里 push 的目标不一定是远端的 Repo 地址也可以是本地的 Repo 地址。最后将新的 Repo 内容强制推送到远程即可。这样我们就可以实现Gerapy/Gerapy Repo docs 文件夹下内容的变动会自动更新到 Gerapy/Docs Repo 了。例如 docs 下是这样的Gerapy/Docs Repo 下和子文件的内容会一直维持同步并在 master 分支上面自动构建 Docker 镜像由于 Gerapy 是一个 Web 工程所以它非常适合于打包一个 Docker 镜像。对于 Docker 的镜像我期望有三个版本•当前 master 分支的版本比较稳定但未发布版本。•最新版本latest代表最新的发布版本。•每个历史版本每次发布版本的版本号都标记一个 tag。最后我们自动构建的镜像都自动 Push 到 Docker Hub 上面这样大家都可以使用了。那这个怎么做到呢同样借助于 GitHub Action 也可以轻松做到。首先 master 版本由于没有发版所以前端需要自行 build然后 Python Package 需要安装本地代码。废话不多说了上代码name: build docker image masteron: push: branches: - master paths: - .github/workflows/** - gerapy/**jobs: build: runs-on: ubuntu-latest steps: - name: Checkout Source uses: actions/checkoutv1 - name: Docker Login run: docker login -u germey -p ${{ secrets.DOCKERHUB_LOGIN_PASSWORD }} - name: Setup Node.js uses: actions/setup-nodev1.1.0 with: version: 10.x - name: Build Frontend Source run: | cd gerapy/client npm install npm run build - name: Build the Docker Image run: | docker build -t germey/gerapy:master -f ./docker/Dockerfile . - name: Push the Docker Image run: docker push germey/gerapy:master可以看到这里监听了 master 分支的变动同时限定了路径 workflows 文件夹和 gerapy 文件夹下变动。流程包括了前端的构建和 Docker 的打包Docker 打包的时候使用了 -f 命令指定了 Dockerfile 的路径并将打包完成之后的镜像标记为 gerapy:master推送到 Docker Hub 即可。对于发布新版本的时候则直接监听 tag 的变动即可name: build docker image releaseon: push: tags: - v*.*.*jobs: build: runs-on: ubuntu-latest steps: - name: Checkout Source uses: actions/checkoutv1 - name: Docker Login run: docker login -u germey -p ${{ secrets.DOCKERHUB_LOGIN_PASSWORD }} - name: Setup Node.js uses: actions/setup-nodev1.1.0 with: version: 10.x - name: Build Frontend Source run: | cd gerapy/client npm install npm run build - name: Build and Push the Docker Image run: | tag${GITHUB_REF:11} echo Build Tag $tag docker build -t germey/gerapy:$tag -f ./docker/Dockerfile . docker push germey/gerapy:$tag regex^([0-9]\.){0,2}(\*|[0-9])$ if [[ $tag ~ $regex ]]; then echo Build Stable Version $tag docker tag germey/gerapy:$tag germey/gerapy:latest docker push germey/gerapy:latest fi可以看到这里监听的配置改成了 tagstag 也变成了一个变量可以通过 ${GITHUB_REF:11} 获取到。同时这里还加了一个正则判断是不是正式的发版如果是 beta、rc 版本则不构建正式 latest 的 Docker 镜像。最后我们看看我再一次发版之后构建完成之后Docker Hub 的效果可以看到我发布了 0.9.2 版本之后它就自动构建了 0.9.2 版本的镜像同时将 latest 镜像指向 0.9.2 版本。另外对应 maser 版本也构建了一个版本。这样以后妈妈再也不用担心我忘记打 Docker 镜像啦。以上便是我将 GitHub Actions 应用到我的开源项目上的记录。最后如果大家对 Scrapy 爬虫感兴趣的话也非常欢迎大家高高兴兴的了解一下我写的 Gerapy 框架利用它我们可以无敌更方便地管理呀、监控呀、或者是部署 Scrapy 爬虫项目什么的。其 GitHub 地址为https://github.com/Gerapy/Gerapy文档https://docs.gerapy.com/。好文和朋友一起看~
http://www.sadfv.cn/news/307964/

相关文章:

  • 案例学——网页设计与网站建设淘宝网站可以做轮播吗
  • 优秀个人网站案例移动互联和网站开发哪个好
  • 中文网站建设和英文网站建设的区别wordpress移动端主题
  • 手机网站定制开发费用河北seo推广系统
  • 响应式网站 有哪些弊端手机制作app模板
  • 网站建设业务终止合作范本网页设计如何引入模板
  • 电子产品营销策划书seo网络推广经理
  • 天津制作网站公司推荐建设永久网站
  • 做网站推广一年多少钱网站建设需要用什么书
  • 仿制网站的后台国内代理ip免费安卓
  • 做网站合同范本西八里庄网站建设
  • 如何修改网站模版wordpress命令安装目录结构
  • 建设旅游网站的价值麦当劳的网络营销方式
  • 如何做静态页网站南京做网站哪家最好
  • 新闻类的手机网站怎么做上海手机响应式网站建设设计
  • 开淘宝店和做网站有什么区别蛙蛙写作网站
  • 手机上怎么做投票网站seo工作室合作
  • 网站建设电影做外贸是不是必须有网站
  • 做网站最简单的域名解析大全
  • 石岩做网站公司知名商业网站有哪些
  • wordpress文章底部版权声明北京优化seo排名
  • 电子商务网站建设的评估工具网络营销分销策略是什么
  • 场口一站式建站哪家公司好share群组链接分享
  • 淄博网站排名优化网站设计与开发培训
  • 工业风 网站建设wordpress谷歌地图插件
  • 网站程序和空间区别汕头网站制作后缀
  • iis网站防盗链重庆网站推广系统
  • 如何搭建自己得网站我国数字经济报告
  • 文件外链生成网站渭南做网站的公司电话
  • 沈阳市住房和城乡建设局网站首页建设植绒衣架网站