jenkins安装使用记录

一、非docker安装:

环境:jdk、maven、nodejs
maven环境变量:
export M2_HOME=/opt/server/apache-maven-3.6.3
export PATH=$PATH:$M2_HOME/bin

wget https://nodejs.org/dist/latest/node-v15.8.0-linux-x64.tar.gz
tar -zxvf node-v15.8.0-linux-x64.tar.gz
nodejs环境变量:
export PATH=/data/nodejs/node-v15.8.0-linux-x64/bin:$PATH
安装cnpm与配置淘宝镜像: npm install -g cnpm --registry=https://registry.npm.taobao.org

npm问题 package.json 修改: "build:qa":"node node_modules/cross-env/dist/bin/cross-env.js"

安装yarn(npm打包有问题)
npm install -g yarn --registry=https://registry.npm.taobao.org
yarn config set registry https://registry.npm.taobao.org -g
yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g
yarn install

安装jenkins:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install jenkins

rpm包安装: rpm -ivh jenkins-2.174-1.1.noarch.rpm

war包位置: /usr/lib/jenkins/
修改配置:  vim /etc/sysconfig/jenkins 端口、workspace等 换成新workspace需要迁移老数据 mv /var/lib/jenkins/* /data/jenkins/  修改用户为root解决权限问题
修改:   /etc/init.d/jenkins 配置java路径
启动:  service jenkins start
重启:  systemctl restart jenkins

登录地址: http://$ip}:${port}
初始登录密码文件: /var/lib/jenkins/secrets/initialAdminPassword (/data/jenkins/secrets/initialAdminPassword)

权限赋予错误的话可以修改配置文件重启
vim /var/lib/jenkins/config.xml(/data/jenkins/config.xml)
  --这个权限对应“ 登录用户可以做任何事”

用户权限:
先建用户,再在系统管理-全局安全配置-授权策略 选择项目矩阵授权策略 add user or group 添加和用户名一样用户权限组 

需要安装的插件:
•发布插件 Deploy to container Plugin 必须
•Maven插件 Maven Integration plugin必须
•git插件 Git plugin 这个根据实际情况,我用的是svn
•svn插件 Subversion Plug-in 这个jenkins自带已经安装过了,推荐安装时有显示
非必须安装插件:
•发送邮件插件 Email Extension Plugin

•小程序插件(readjson、writejson) Pipeline Utility Steps
 

二、docker安装

docker安装jenkins 
1、拉取镜像  docker pull jenkins/jenkins
2、创建本地数据卷 mkdir -p /data/jenkins_docker/
    需要修改下目录权限,因为当映射本地数据卷时,/data/jenkins_docker/目录的拥有者为root用户,而容器中jenkins用户的 uid 为 1000
    chown -R 1000:1000 /data/jenkins_docker/
3、创建容器
    docker run -d --name jenkins -p 37006:8080 -p 37007:50000 -v /data/jenkins_docker:/var/jenkins_home jenkins/jenkins
    -d 标识是让 docker 容器在后台运行
    --name 定义一个容器的名字,如果没有指定,那么会自动生成一个随机数字符串当做UUID
    -p 37006:8080 端口映射,宿主机端口37006
    -p 37007:50000 端口映射
    -v /data/jenkins_docker:/var/jenkins_home 绑定一个数据卷,/data/jenkins_docker 是刚才创建的本地数据卷

已经运行的docker容器怎么设置自动重启  docker update --restart=always jenkins  也可以在启动容器时 -d 后面加--restart=always


4、打开 Jenkins
    获取密码 docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 或者 cat /data/jenkins_docker/secrets/initialAdminPassword
5、安装插件 
    nodejs
6、配置全局设置
    docker exec -it jenkins容器id /bin/bash 查看路径 echo $JAVA_HOME 、which git 然后配置进去 、maven、nodejs使用jenkins自己安装,nodejs的配置global npm packages to install 配置 cnpm
    maven配置文件修改仓库
    vim /data/jenkins_docker/tools/hudson.tasks.Maven_MavenInstallation/maven3/conf/settings.xml
    
        nexus-aliyun
        *
        Nexus aliyun
        http://maven.aliyun.com/nexus/content/groups/public
   

7、有个jar下载不了,手动上传/data/jenkins_docker/.m2/repository/org/reflections/reflections/1.0

根据容器创建镜像 docker commit -m myjenkins -a carlos 808c1464bb73 carlos:jenkins

启动容器查看是否生效 docker run -d --name myjenkins -p 37006:8080 -p 37007:50000 -v /data/jenkins_docker:/var/jenkins_home carlos:jenkins

给镜像打tag  docker tag ${ip}:${port}/jenkins carlos:jenkins

推送私有仓库  docker push ${ip}:${port}/jenkins

8、docker备份还原

8.1 打包成镜像 :docker commit 容器id bb_jenkins

8.2 保存镜像 :docker save bb_jenkins > /data/jenkins_image/bb_jenkins.tar

8.3 恢复镜像docker load < /data/jenkins_image/bb_jenkins.tar

8.4 启动容器 docker run -d --name bb_jenkins -p 8005:8080 -p 8006:50000 -v /data/jenkins_docker:/var/jenkins_home  -e JENKINS_OPTS="--prefix=/jenkins"  bb_jenkins

三、流水线语法

1、后台后端代码打包
pipeline {
    agent any
    tools{
        maven 'maven3' //maven3必须是已经在jenkins上配置的工具
        jdk 'jdk8'
    }
    // 环境变量 
    environment {
       GIT_USER_NAME = 'xxx'
       GIT_USER_EMAIL = xxx'
       BRANCH_NAME = 'xxx'
       container_branch = 'xxx'
       basic_address = 'xxx'
       business_address = 'xxx'
       container_address = 'xxx'
       cid = 'xxx'
    }
    stages('build'){
        // 拉取git代码
        stage('build') {
            steps {
                git branch: "${BRANCH_NAME}", credentialsId: "${cid}", url: "${basic_address}"
                sh 'mvn clean install -Dmaven.test.skip=true'
                git branch: "${BRANCH_NAME}", credentialsId: "${cid}", url: "${business_address}"
                sh 'mvn clean install -Dmaven.test.skip=true'
                git branch: "${container_branch}", credentialsId: "${cid}", url: "${container_address}"
                sh 'mvn clean install -Dmaven.test.skip=true'
            }
        }
    }
}

2、后台前端代码打包
node () {
  def workspace = pwd()
  env.NODEJS_HOME = "${tool 'nodejs'}"
  def cid = "xxx"
  def gitaddress = "xxx"
  def branch = "dev"
  // on linux / mac
  env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}"
  sh 'npm --version'
  stage 'checkout'
     dir('web'){
  git branch: "${branch}", credentialsId: "${cid}", url: "${gitaddress}"
     }
      
  stage '项目构建'
    sh """ 
  echo $workspace
  cd $workspace/web
  cnpm install 
  cnpm run build:sit
  
    """
}


小程序代码打包上传微信
pipeline {
   agent any
//   tools {nodejs "nodejs"}
   // 环境变量 
   environment {
       GIT_USER_NAME = 'xxx'
       GIT_USER_EMAIL = 'xxx'
       GIT_ADDRESS = 'xxx'
       BRANCH_NAME = 'dev'
       credentialsId = 'xxx'
   }
  stages {
        // 拉取git代码
        stage('拉取代码') {
            steps {
                git branch: "${BRANCH_NAME}", credentialsId: "${credentialsId}", url: "${GIT_ADDRESS}"
            }
        }
        // 询问当前版本信息
        stage('inquirer version') {
            steps {
                script { 
                    // 读取版本信息
                    def versionJson = readJSON file: './version.config.json', text: ''
                    echo '当前版本 ${versionJson.version}'
                    // 设置问题描述
                    // def userInput = input(
                    //     id: 'versionInput',
                    //     message: '请设置版本信息', 
                    //     parameters: [
                    //         [defaultValue: versionJson.version, description: '设置版本号', name: 'VERSION', $class: 'TextParameterDefinition'],
                    //         [defaultValue: 'jenkins CI is upload trial version as: ' + new Date().format('yyyy-MM-dd HH:mm:ss'), description: '设置版本描述(please use english)', name: 'VERSIONDESC', $class: 'TextParameterDefinition']
                    //     ])
                    
                    // 设置全局变量
                    // env.VERSION = userInput.VERSION;
                    // env.VERSIONDESC = userInput.VERSIONDESC;
                    
                    // 重写本地版本文件(为后续进行版本提交做准备)
                    // writeJSON file: './version.config.json', json: [version:  env.VERSION, versionDesc: env.VERSIONDESC], pretty: 4;
                }
            }
        }
        stage('get_tag') {
            steps {
                script {
                    env.GIT_COMMIT_MSG = sh (script: 'git log -1 --pretty=%B ${GIT_COMMIT}', returnStdout: true).trim()
                    env.TAG = sh(returnStdout: true ,script: "git describe --abbrev=0 --tags").trim()
                    oldv='versionfromtag="'
                    oldvd='versionDescfromcommit="'
                    workspace = pwd()
                } 
                sh "echo ${env.TAG}"
                sh "sed -i 's/${oldv}/&${env.TAG}/g' ${workspace}/ci.js"
                sh "sed -i 's/${oldvd}/&${env.GIT_COMMIT_MSG}/g' ${workspace}/ci.js"
            }
        }
        // 构建
        stage('build') {
            steps {
                nodejs('nodejs') {
                    sh "cnpm install"
                    sh "node run devbuild:mp-weixin"
                    sh "node ci.js"
                }
                
            }
        }
       
        // 推送版本信息到git仓库
        // stage('push version2git') {
        //     steps {
        //         sh "git config --local user.name ${GIT_USER_NAME} && git config --local user.email ${GIT_USER_EMAIL}"
        //         sh "git add version.config.json"
        //         sh "git commit -m 'docs: 更改版本号为${VERSION}'"
        //         sh " git remote -v"
        //         sh " whoami"
        //         sh "git push origin ${BRANCH_NAME}"
        //     }
        // } 
   }
}

参考:微信小程序CI流程搭建教学(1) -- 实现云构建 | 微信开放社区

你可能感兴趣的:(项目管理工具,docker,maven,npm,vue,jenkins)