1、使用xshell 登录服务器。
2、使用流水线构建。
点击 “新建任务”,输入自定义任务名称,选择 “流水线”,点击确定。
配置示例如下:
流水线:从版本控制库拉取pipeline
。本例为,让Jenkins从Git仓库拉取pipeline并执行。注意项目的可见性选为 公开,并且需要将Git私钥放到Jenkins上,这样Jenkins才有权限从Git仓库拉取代码。
[图片上传失败...(image-e3473a-1620376972062)]
3、项目根目录新建 Jenkins文件夹,里面新建Jenkinsfile 文件。
执行 npm install 命令时,timeout。最后配合Dockerfile解决了该问题。
阅读pipeline文件,需要了解必要的Groovy知识。定义变量,定义方法,单引号,双引号和三引号。
agent:指定流水线的执行位置,其必须在某个地方(物理机、虚拟机或Docker容器)执行。
pipeline支持的指令
{
node {
label 'jdk8'
}
}
agent {
docker {
label 'docker'
image '15.14.0-alpine3.10'
}
}
参考文章:
https://hub.docker.com/_/node
https://www.jenkins.io/zh/doc/book/pipeline/docker/
https://www.jenkins.io/zh/doc/book/pipeline/jenkinsfile/#using-multiple-nodes
// 三个阶段
pipeline {
agent any
options {
disableConcurrentBuilds()
}
environment {
CI = 'true'
}
stages {
// 阶段1 发送邮件
stage('get GIT_COMMIT_EMAIL') {
agent any
steps {
checkout scm
script {
// Git committer email
env.git_commit_email = sh (script: "git --no-pager show -s --format='%ae' $GIT_COMMIT",returnStdout: true).trim()
echo "Git committer email: ${GIT_COMMIT_EMAIL}"
}
}
}
// 阶段2 构建
stage('Build') {
steps{
sh 'docker build -t site:${BUILD_NUMBER} ./'
sh 'docker tag site:${BUILD_NUMBER} 172.27.24.217:5000/site:${BUILD_NUMBER}'
sh 'docker push 172.27.24.217:5000/site:${BUILD_NUMBER}'
}
}
// 阶段3 部署
stage('Deploy') {
steps{
script {
try {
sh 'docker stop site'
sh 'docker rm site'
}
catch (exc) {
echo 'site not exist, create now'
}
}
// 将项目启动的4500端口映射到4600端口,最终访问172.27.24.217:4600
sh 'docker run -p 4600:4500 -d --restart=always --name site 172.27.24.217:5000/site:${BUILD_NUMBER}'
}
}
}
}
4、项目根目录下新建Dockerfile文件
FROM node:15-alpine3.10 as builder
ENV NODE_ENV production
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm i --registry=http://172.27.24.217:4873/
COPY . /usr/src/app
RUN npm run build
// 复制打包后的.next和public文件夹到/app/.next和/app/public文件夹下。
// 复制package.json到/app文件夹下
// 设置npm代理
// 将项目启动在 4500 端口
// --from=builder 中的builder 和第一行的as builder关键字对应
FROM node:15-alpine3.10
RUN mkdir -p /app
WORKDIR /app
COPY --from=builder /usr/src/app/.next /app/.next
COPY --from=builder /usr/src/app/package.json /app
COPY --from=builder /usr/src/app/public /app/public
RUN npm i next --registry=http://172.27.24.217:4873/
EXPOSE 4500
CMD npm run start
5、docker 命令
https://yeasy.gitbook.io/docker_practice/appendix/command/docker#ke-hu-duan-ming-ling
docker images
history | grep xxx
docker ps //查看container
docker exec -it 301b /bin/sh //进入到301b容器,301b是container id 前4位 /bin/sh可能是别的值
docker inspect containerId 查看容器相关信息,"Cmd"属性中的脚本名称即上一步中的 /bin/sh
docker container run -p 8000:80 nginx:v3 -d
-d 后台运行
docker logs f626 查看日志 , f626是日志文件的前几位
docker logs --tail 5 f626 查看日志的前5位
直接用huiyun用户登入,无法执行构建指令,docker image build
需要通过su命令切换到root目录,然后再进入到huiyun目录。
删除镜像
docker rmi $(docker images | grep "none")
docker image rm $(docker image ls -q -f before=REPOSITORY:TAG)