最简单的vue项目快速搭建jenkins(带视频)

455 阅读1分钟

我正在参加「掘金·启航计划」

视频地址 www.bilibili.com/video/BV1PV…

思路是:

  • 用node镜像编辑代码

  • 推送到仓库

  • ssh服务器运行镜像

步骤:

  • 1、安装 jenkins docker,要给docker.sock和jennkins_home为777权限

  • 2、默认安装jenkins,默认安装推荐插件

  • 3、配置system三个凭据(gitlab账号密码:gitlabroot,部署服务器ssh密钥:sshserver,推送镜像仓库账号密码:harbor)

  • 4、增加jenkins插件 Git Parameter、SSH Agent

  • 5、web项目根目录建Dockerfile文件,用node镜像打包,用nginx镜像做web服务器

  • 6、jenkins中建项目,建流水线,选SCM并配置信息

  • 7、构建运行两遍

安装

如果docker服务重启后,需要每次执行sudo chmod 777 /var/run/docker.sock,因为jenkins里面不是root会报没权限

chmod 777 /var/run/docker.sock

mkdir -p /var/jenkins_home

chmod 777 /var/jenkins_home

docker run -d --restart always -p 30600:8080 -p 30601:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker --name jenkins jenkins/jenkins

首次登录密码

cat /var/jenkins_home/secrets/initialAdminPassword

按照推荐插件安装

image.png

image.png

给system配密钥

gitlab账号密码:gitlabroot

image.png

部署服务器ssh密钥:sshserver

image.png

创建ssh密码

ssh-keygen

cd ~/.ssh

推送镜像仓库账号密码:harbor

image.png

最终

image.png

装插件并勾选重启

Git Parameter

SSH Agent

注意:第一次运行会失败,因为是gitParameter依赖与后面checkout的仓库信息

image.png

新建流水线项目

选择Pipeline script from SCM或者直接贴下面pipeline内容

image.png

项目新建Dockerfile文件

# compile
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install --registry=https://registry.npm.taobao.org
COPY . .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

项目下新建Jenkinsfile文件

// 注意先建system凭据

pipeline {
    agent any
	
	environment {
        // 全局变量
        imageTag = sh returnStdout: true, script: "date +%Y%m%d%H%M%S"
        imageLibrary = 'rootegg'
        imageApp = 'bashi-admin-web'
    }
    
    parameters {
        gitParameter name:'MR_TO_BRANCH',
                     type:'PT_BRANCH_TAG',
                     branchFilter:'origin/(.*)',
                     defaultValue:'master',
                     selectedValue:'DEFAULT',
                     sortMode:'DESCENDING_SMART',
                     description:'选择分支'
    }
	
    stages {
        stage('拉取代码') {
            steps {
                git branch: "${MR_TO_BRANCH}",credentialsId: 'gitlabroot', url: "https://gitlab.com/rootegg/bashi-admin-web.git"
            }
        }
        stage('打包docker') {
            steps {
                script{
                    withCredentials([usernamePassword(credentialsId: 'harbor', passwordVariable: 'harbor_password', usernameVariable: 'harbor_username')]) {
                        sh '''
                            docker login -u ${harbor_username} -p ${harbor_password}
                            docker build -t ${imageLibrary}/${imageApp}:${imageTag} .
                            docker push ${imageLibrary}/${imageApp}:${imageTag}
    				    '''
                    }
                }
            }
        }
        stage('部署') {
            steps {
                script{
                    sshagent(credentials: ["sshserver"]) {
                        withCredentials([usernamePassword(credentialsId: 'harbor', passwordVariable: 'harbor_password', usernameVariable: 'harbor_username')]) {
                            sh '''
                                docker login -u ${harbor_username} -p ${harbor_password}
                                docker ps --filter "name=${imageApp}" -aq | xargs -r docker rm -f 
                                docker run -d --name ${imageApp} -p 8080:80 ${imageLibrary}/${imageApp}:${imageTag}
        				    '''
                        }
                    }
                }
            }
        }
    }
}

完成

image.png