zoukankan      html  css  js  c++  java
  • 一分钟开始持续集成之旅系列之:Node + Express 应用

    介绍

    目的

    通过 Coding CI 帮助我们来完成 Node + Typescript + Express 实现一个命令行版本的 “每日一句” 的小工具。希望通过这个小案例,帮助大家快速掌握 Coding CI + Docker 。

    源码地址

    https://coding-public.coding.net/p/coding-ci-express/d/coding-ci-express/git/

    效果展示

    项目简介

    使用技术

    • Node v12.16.1 + Typescript + Express
    • Docker

    目录说明

    .
    ├── .dockerignore
    ├── .eslintrc.js
    ├── .gitignore
    ├── Dockerfile
    ├── Jenkinsfile
    ├── package-lock.json
    ├── package.json
    ├── readme.md
    ├── src
    │   ├── day.ts
    │   └── index.ts
    └── tsconfig.json
    
    

    代码运行

    源码运行

    git clone https://e.coding.net/coding-public/coding-ci-express/coding-ci-express.git
    cd coding-ci-express.git
    npm install
    npm run dev
    
    curl localhost:3000
    

    Docker 运行

    docker run -d -p 3000:3000 asdasdasd
    

    构建过程

    创建项目

    https://e.coding.net/coding-public/coding-ci-express/coding-ci-express.git 的代码 Push 到新创建仓库中。

    创建构建计划

    这里我们使用静态的 Jenkinsfile 和 Coding CI 提供的 Jenkinsfile 模板,帮助我们快速的编写 Jenkinsfile。当然也可以使用代码库中的 Jenkinsfile ,如果我们对于 Jenkinsfile 的编写不是很熟悉的话,使用模板可以帮助我们快速开始。

    选择 CODING Docker 镜像推送,修改构建参数。

    创建 Docker 制品库

    准备 Dockerfile

    准备 Jenkinsfile

    Coding CI 支持代码库内部的 Jenkinsfile 和静态的 Jenkinsfile,Coding CI 的构建中为我们准备好了很多环境变量,帮助我们编写 Jenkinsfile 。

    pipeline {
      agent any
      stages {
        stage('检出') {
          steps {
            checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
            userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]])
          }
        }
        stage('打包镜像') {
          steps {
            sh "docker build -t ${env.DOCKER_IMAGE_NAME}:${env.CI_BUILD_NUMBER} ."
          }
        }
        stage('推送到制品库') {
          steps {
            script {
              docker.withRegistry("https://${env.CODING_DOCKER_REG_HOST}", "${env.CODING_ARTIFACTS_CREDENTIALS_ID}") {
                docker.image("${env.DOCKER_IMAGE_NAME}:${env.CI_BUILD_NUMBER}").push()
              }
            }
    
          }
        }
      }
      environment {
        CODING_DOCKER_REG_HOST = "${env.CCI_CURRENT_TEAM}-docker.pkg.${env.CCI_CURRENT_DOMAIN}"
        DOCKER_IMAGE_NAME = "${env.PROJECT_NAME.toLowerCase()}/${env.DOCKER_REPO_NAME}/hello-world"
      }
    }
    
    

    彩蛋

    我们可以将该应用和终端结合使用,这样就可以在每次启动终端的时候就可以看到 “每日一句” 了。

    echo "curl localhost:3000" >> ~/.zshrc
    or 
    echo "curl localhost:3000" >> ~/.bashrc
    
  • 相关阅读:
    路由的使用
    组件之间的参数传递
    vue组件的全局注册和局部注册
    git版本回退(回退至上个版本,回退至指定版本) git放弃本地所有未提交的修改
    vue工程中的文件
    新建vue项目(webpack-simple)
    NPM install -save 和 -save-dev 傻傻分不清
    动态增加表单vue element ui
    JAVA声明一个对象数组
    调用测试用
  • 原文地址:https://www.cnblogs.com/codingdevops/p/12800473.html
Copyright © 2011-2022 走看看