Docker 安装 Jenkins
开始前最好,将docker升级到最新版本(至少大于17)
1. 安装过程
首先拉取镜像:docker pull jenkins
(我安装的是Jenkins 2.275)
创建本地数据卷:mkdir -p /data/jenkins_home/
修改用户授权:chown -R 1000:1000 /data/jenkins_home/
启动容器:
docker run -d --name jenkins -p 7900:8080 -p 50000:50000 -v /data/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins
这里挂载了物理盘映射
还挂载了docker映射
访问对应网址:xxx:7900
获取初始管理员密码(两种方式,因为映射了本地逻辑卷)
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
或者在进入容器后(docker exec -it jenkins /bin/bash
):cat /data/jenkins_home/secrets/initialAdminPassword
选择安装推荐的插件等待即可
按照流程创建管理员账户
根据之前的情况创建实例,即完成
2. Jenkins 安装 npm
首先以root权限进入容器:docker exec -it -u root jenkins bash
2.1. 替换容器的源
备份:cp /etc/apt/sources.list /etc/apt/sources.list.bak
查看系统版号:lsb_release -c
,并且将下文中替换文件中的对应位置进行修改
修改:vim /etc/apt/sources.list
,如果无法拉取:sudo apt install apt-transport-https ca-certificates
,vim中使用shift+insert插入
W: Unable to read /etc/apt/preferences.d/ - DirectoryExists (2: No such file or directory)
:这时新建此文件夹即可mkdir /etc/apt/preferences.d
如果没有vim,先apt update
,然后apt install vim
1 2 3 4 5 6 7 8 9 deb https://mi rrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free deb https://mi rrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free deb https://mi rrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free deb https://mi rrors.tuna.tsinghua.edu.cn/debian-security buster/u pdates main contrib non-free
添加node源:curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
2.2. 安装nodejs和npm
然后安装node.js:apt-get install nodejs
,一定要先更新源
然后安装npm:apt-get install npm
,
之后替换npm源:npm config set registry http://registry.npm.taobao.org/
3. Jenkins流水线 + Docker + Maven + Github webhooks + Spring boot
3.1. 需要的插件和配置
3.1.1. 插件
Blue Ocean
Maven Integration
3.1.2. 配置
查看容器的全部信息:docker inspect jenkins
,其中的Env项中包含了JAVA_HOME
等环境信息,如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 "Env" : [ "PATH=/usr/local/openjdk-8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" , "LANG=C.UTF-8" , "JAVA_HOME=/usr/local/openjdk-8" , "JAVA_VERSION=8u242" , "JAVA_BASE_URL=https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u242-b08/OpenJDK8U-jdk_" , "JAVA_URL_VERSION=8u242b08" , "JENKINS_HOME=/var/jenkins_home" , "JENKINS_SLAVE_AGENT_PORT=50000" , "REF=/usr/share/jenkins/ref" , "JENKINS_VERSION=2.275" , "JENKINS_UC=https://updates.jenkins.io" , "JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental" , "JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals" , "COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log" ]
进行全局工具配置:Jenkins -> 系统管理 -> 全局工具管理
jdk配置,如果没有自动安装,如果有则使用上面的JAVA_HOME地址即可
Git配置
Docker配置
3.1.3. 安装maven
同样的进入容器:docker exec -it -u root jenkins bash
下载maven压缩包:wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压缩maven安装包:tar -zvxf apache-maven-3.6.3-bin.tar.gz
配置环境变量:vi /etc/profile
(安装vi:apt-get install vi
)
1 2 3 export MAVEN_HOME=/opt/apache-maven-3.6.3export MAVEN_HOMEexport PATH=$PATH :$MAVEN_HOME /bin
编辑maven的settings.xml
来替换源(位置conf/
下),在<mirrors></mirrors>
标签内添加一下任意一个
1 2 3 4 5 6 <mirror > <id > alimaven</id > <name > aliyun maven</name > <url > http://maven.aliyun.com/nexus/content/groups/public/</url > <mirrorOf > central</mirrorOf > </mirror >
刷新权限:source /etc/profile
然后在Jenkins -> 系统管理 -> 全局工具管理
继续进行Maven配置
3.1.4. 配置Jenkins使用Docker
之前在创建容器的时候已经完成了sock的映射
登录进入jenkins容器:docker exec -it -u root jenkins bash
安装docker client:
1 2 3 4 5 6 7 8 9 10 11 12 13 apt-get update && \ apt-get -y install apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common && \ curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID " )/gpg > /tmp/dkey; apt-key add /tmp/dkey && \ add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID " ) \ $(lsb_release -cs) \ stable" && \ apt-get update && \ apt-get -y install docker-ce
通过输入docker
来检查是否成功
授予jenkins用户docker权限:
以root用户身份进入jenkins容器:docker exec -it -u root jenkins /bin/bash
查看当前用户情况:ls -l /var/run/docker.sock
授权jenkins
用户:chown jenkins: /var/run/docker.sock
再次查看用户情况:ls -l /var/run/docker.sock
检查docker ps
之类的命令是否可以使用
3.1.5. 配置Jenkins中的Git SSH
进入jenkins容器:docker exec -it jenkins /bin/bash
生成SSH密钥:ssh-keygen
,一路回车使用默认值
查找密钥:cat /var/jenkins_home/.ssh/id_rsa.pub
然后登录Github,在settings->SSH and GPG keys
中添加密钥。
3.1.6. Github添加Webhook
进入想要部署的仓库,settings -> webhook
,选择Add Webhook
设置payload_url为jenkins对应地址:xxx(jenkins访问网址)/github-webhook/
选择Just the push event.
和Active
后保存即可
3.1.7. 配置主从节点
避免出现如下报错:pending—Waiting for next available executor
进入对应位置:系统管理 -> 节点管理
点击配置主从节点
,设置至少为2个。
3.2. 使用流水线新建任务
点击新建任务
,新建一个名为Jenkins-Demo
的流水线任务
构建触发器
选择GitHub hook trigger for GITScm polling
流水线中(jenkinsfile
文件放置在仓库根目录下)
定义
选择Pipeline script from SCM
SCM
选择Git
Repository URL
输入对应仓库的git@xxx.git
地址
如果出现报错如下,则先进入jenkins容器输入命令git ls-remote -h -- git@github.com:xxx.git HEAD
:并输入yes
确认
1 2 3 4 5 6 7 无法连接仓库:Command "git ls-remote -h -- git@github.com:xxx.git HEAD" returned status code 128 :stdout :stderr : Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rightsand the repository exists
最后指定分支为main
,整体如下图所示
之后选择保存即可
之后点击立即构建
来查看效果
4. GitLab + Jenkins + Spring Boot
4.1. 配置GitLab插件和连接
Jenkins需要安装插件GitLab Plugin和GitLab Hook Plugin
进入系统配置,找到GitLab的配置位置,进行配置
注意上面需要的API token需要到GitLab的用户设置中,生成Personal Access Tokens
填写完成后点击Test Connection,如果显示Success表示配置成功
完成GitLab的Ssh配置,过程完全类似第二大步中的对应步骤。
4.2. 创建项目
勾选Build when a change is pushed to GitLab. GitLab webhook URL:
下拉找到点击高级,找到Allowed branches,选择Filter branch by name(一般是master)
在下拉,来到流水线中,选择Pipeline script from SCM,URL填写GitLab获取的URL,进行测试(注意如果出现git ls-remote -h -- ssh://git@xxx.git HEAD
,第一次是需要进入容器执行该命令,并输入yes)
进入GitLab的对应项目仓库,找到settings->integration配置刚刚得到的webhook URL(注意看提示),然后点击Test(模拟一次Push events),如果返回为403码,则查看参考八
之后配置好jenkinsfile,然后跟踪构建结果即可。
5. Jenkins 使用Pipeline集成Cobertura(不支持Java 1.8)
jenkins首先安装插件Cobertura Plugin
在pom文件的build->plugins下添加如下的plugin以生成xml格式的覆盖率检查报告
1 2 3 4 5 6 7 8 9 10 11 <plugin > <groupId > org.codehaus.mojo</groupId > <artifactId > cobertura-maven-plugin</artifactId > <configuration > <formats > <format > xml</format > </formats > <check /> </configuration > </plugin >
使用:mvn cobertura:cobertura
生成相应的测试报告,默认路径为**/target/site/cobertura/
在流水线中添加如下post以添加覆盖报告到Jenkins UI。
1 2 3 4 5 post { always { step([$class: 'CoberturaPublisher', autoUpdateHealth: false, autoUpdateStability: false, coberturaReportFile: '**/target/site/cobertura/coverage.xml', failUnhealthy: false, failUnstable: false, maxNumberOfBuilds: 0, onlyStable: false, sourceEncoding: 'ASCII', zoomCoverageChart: false, enableNewApi: true]) } }
6. Jenkins 使用pipeline集成jacoco
在jenkins中安装jacoco
插件
在html发布后发现了403问题,在script界面运行System.clearProperty("hudson.model.DirectoryBrowserSupport.CSP")
之后重新构建 并发布HTML报告即可
7. 实用插件
Jenkins 嵌入到 Iframe
Jenkins用户组管理
8. 配置Jenkins的分布式构建和部署
jenkins分布式构建和部署(master-slave)
9. 参考
Jenkins官方教程
Docker 安装 Jenkins (超详细)
Jenkins 插件安装失败解决办法
Jenkins+Docker+github+Spring Boot自动化部署
Jenkins容器中安装Docker
Jenkins持续集成显示pending—Waiting for next available executor
30分钟搞定 Jenkins CI
gitlab webhook jenkins 403问题解决方案
jenkins安全内容配置策略