一、非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
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) -- 实现云构建 | 微信开放社区