一分钟开始持续集成之旅系列之: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