当前位置: 首页 > 后端技术 > Node.js

GitHubActions自动化Node.js程序

时间:2023-04-03 13:37:05 Node.js

关于前言关于前置知识一点点node,一点点docker,一点点git关于本文内容:使用Docker部署应用使用GitHubAction持续集成Node应用到DockerHub请做好准备一个node的预先helloworld程序,在node的官网上有提供最简单的例子是关于node的docker镜像。镜像现有应用程序的Docker需要一个dockerfile和.dockerignore。下面是例子中的dockerfile#使用父镜像FROMnode:current-slim#设置工作目录WORKDIR/usr/src/app#将文件从宿主机复制到当前位置COPYpackage.json.#运行镜像文件中的命令RUNnpminstall#描述容器运行时监听的端口EXPOSE6060#在容器中运行的命令CMD["npm","start"]#复制应用程序的其余源代码从您的主机到图像文件系统COPY。./这个dockerfile复制package.json,运行npminstall,启动端口号为6060的节点服务,可以使用如下docker指令在://localhost:6060生成http服务#生成docker镜像dockerbuild-tna-example.#rundockerimagedockerrun-dp6060:6060--namena-examplena-example关于GithubAction自动化的过程,大致预期过程如下:gitpushlatestcodeGitHubActionstartrunningdockerbuildlatestcodemirrordockerlogin默认登录https://hub.docker.com/dockerpush推送镜像GitHubAction可以在自己项目的Action项目中选择开源工作流生成,选择dockerworkflow,.github/workflows/docker.yml文件会在项目中生成。本项目来源于docker的工作流名称:Dockeron:push:#将`main`发布为Docker`latest`镜像。branches:-main#发布`v1.2.3`标签作为发布。tags:-v*#为任何PR运行测试。pull_request:branches:-mainenv:IMAGE_NAME:na-exampleDOCKER_USERNAME:${{secrets.DOCKER_USERNAME}}DOCKER_PASSWORD:${{secrets.DOCKER_PASSWORD}}jobs:build:runs-on:ubuntu-lateststeps:-使用:actions/checkout@v2-名称:构建映像运行:dockerbuild-t$IMAGE_NAME。-名称:登录DockHub运行:dockerlogin-u${{secrets.DOCKER_USERNAME}}-p${{secrets.DOCKER_PASSWORD}}-名称:将图像推送到DockHub运行:|IMAGE_ID=$DOCKER_USERNAME/$IMAGE_NAME#转成小写IMAGE_ID=$(echo$IMAGE_ID|tr'[A-Z]''[a-z]')#从版本中删除github-ref或github-sha前显VERSION=$(echo"${{github.sha}}"|sed-e's,.*/\(.*\),\1,')#从标签名称中删除v前显#["${{github.ref}}"=="引用/标签/"*]]&&VERSION=$(echo$VERSION|sed-e's/^v//')#使用Docker`latest`标签约定["${{github.ref}}"=="main"]&&VERSION=latest#保留前7位VERSION=${VERSION:0:7}#打印IMAGE_IDechoIMAGE_ID=$IMAGE_ID#打印VERSIONechoVERSION=$VERSIONdockertag$IMAGE_NAME${IMAGE_ID}:$VERSIONdockerpush$IMAGE_ID:$VERSION解析如下文件第1-10行:当代码推送到主分支或者tag中有关键字v时,会触发工作流第12-15行:工程中拉取的分支flowismainline17-20:Definecustomenvironmentvariablesintheworkflowline24:Runs-onworkflowrunningenvironmentlines26-27:Workflowsteps,andworkflowrunningenvironmentlines28-32:生成docker镜像并登陆docker.hubline34-60:运行shell脚本,定义条件下图片的tag,然后上传到docker.hubSecrets,使用Secrets作为env变量,需要通过github设置,可以在Setting中创建->项目中的秘密。PS:比较优秀的是,即使是相关字符串,在GitHubAction中也显示带*关于遇到的问题Q:关于node项目使用127.0.0.1或localhost作为启动IP生成docker镜像后,运行后无法访问A:由于127.0.0.1或者localhost指向的是镜像中的IP,不是外部IP。如果需要外部访问,可以修改启动IP为0.0.0.0Q:关于GitHub操作的默认环境变量A:请参阅GitHub操作和环境变量的上下文和表达式语法以获取摘要。该项目的所有代码均粘贴自na-example。谢谢阅读。请参考HowtoCIandCDaNode.JSApplicationUsingGitHubActionsGitHubActiondockerdocs