步骤一 安装jenkins
- 采用docker拉取jenkins官方最新镜像
docker pull jenkins/jenkins:lts-jdk11
- 创建Jenkins容器,这里推荐docker-compose创建, docker-compose.yml如下
version: '3'
services:
jenkins:
image: jenkins/jenkins:lts-jdk11
build: .
container_name: myjenkins
restart: always
ports:
- '127.0.0.1:9999:8080'
- '127.0.0.1:50000:50000'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
- /home/jenkins-home:/var/jenkins_home
如果没有配nginx,ports中直接设置为
ports:
- '8080:8080'
- '50000:50000'
将jenkins主目录挂在到宿主机的/home/jenkins-home(自己能记住就行)
由于我们即将部署的web项目是采用docker部署,所以将宿主机中的docker和docker-compose一并映射进jenkins容器中
此时浏览器访问服务器的8080端口,(配了域名和nginx的直接访问),即可进入jenkins的初始化界面,一顿设置后,进入dashboard
步骤二 安装Jenkins插件,配置webhook
仓库在码云的话,安装gitee 的插件,该插件可以实现push,PR等构建触发器
webhook配置原理同上文一致,在jenkins中生成sign
将webhook调用的地址配置在码云仓库里面,带上sign
步骤三 在项目中添加构建脚本
- Dockerfile 镜像的构建脚本
以本项目为例是基于NextJs的ssr项目,采用官方dockerfile,添加了sitemap的生成脚本,其余没变,自行编写自己的dockerfile
# Install dependencies only when needed
FROM node:alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json ./
RUN yarn install --frozen-lockfile
# Rebuild the source code only when needed
FROM node:alpine AS builder
WORKDIR /app
COPY . .
COPY --from=deps /app/node_modules ./node_modules
RUN yarn build
RUN yarn postbuild
# Production image, copy all the files and run next
FROM node:alpine AS runner
WORKDIR /app
ENV NODE_ENV production
# You only need to copy next.config.js if you are NOT using the default configuration
# COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
RUN chown -R nextjs:nodejs /app/.next
USER nextjs
EXPOSE 3000
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry.
# RUN npx next telemetry disable
CMD ["node_modules/.bin/next", "start"]
- docker-compose.yml 容器的运行脚本
version: '3'
services:
fishing-funds-home:
image: fishing-funds-home:latest
build: .
container_name: fishing-funds-home
environment: #环境
- TZ=Asia/Shanghai #设置时区
restart: always
ports:
- 'xxx.xxx.xxx.xxx:xxxx'
- Jenkinsfile jenkins pipline 构建脚本
pipeline {
agent any
environment {
DOCKER_HOST = 'tcp://xxx.xxx.xxx.xxx:xx'
}
stages {
stage('Build') {
steps {
sh "/usr/bin/docker build -t fishing-funds-home:latest . "
}
}
stage('Deploy') {
steps {
sh "/usr/local/bin/docker-compose up -d"
}
}
}
}
提交代码后,jenkins就开始自动构建了
console output中可以查看详细打包信息
至此,基于WebHook + Jenkins Pipline + Docker的CI/CD自动构建就完成了
发布结果:Fishing Funds官网
It’s very effortless to find out any topic on net
as compared to textbooks, as I found this post at this web site.
I am regular reader, how are you everybody? This article posted at this site is actually nice.
It’s very easy to find out any topic on net as compared to books, as I found this piece of writing at this web site.