部署
创建目录,做docker的volume卷
mkdir -p /data/jenkins/jenkins_home
设置权限,默认情况下 (默认情况下,jenkins镜像用jenkins用户启动,不改权限的话,没有写入权限)
chmod -R 777 /data/jenkins
启动
docker run -d --name myjenkins -p 8080:8080 -v /data/jenkins/jenkins_home/:/var/jenkins_home jenkins/jenkins:2.289.1-lts-jdk11
环境安装
开启权限全局安全配置
1.安装插件
我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限
2.修改授权策略
授权策略切换为"Role-Based Strategy",保存
保存
3.创建角色
在系统管理页面进入 Manage and Assign Roles
点击"Manage Roles"
Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
item roles(项目角色):针对某个或者某些项目的角色 Slave roles(奴隶角色):节点相关的权限
添加以下三个角色:
- baseRole:该角色为全局角色。这个角色需要绑定Overall下面的Read权限,是为了给所有用户绑定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission
- role1:该角色为项目角色。使用正则表达式绑定"html.*",意思是只能操作html开头的项目。
- role2:该角色也为项目角色。绑定"java.*",意思是只能操作java开头的项目。
保存。
4.创建用户
新建两个用户qing hai
5.给用户分配角色
系统管理页面进入Manage and Assign Roles,点击Assign Roles
绑定规则如下:
- qing用户分别绑定baseRole和role1角色
- hai用户分别绑定baseRole和role2角色
6.创建项目测试权限
结果正常
凭证管理
权限管理插件 Role-based Authorization Strategy
凭证管理插件 Credentials Binding
可以添加的凭证有5种:
- Username with password:用户名和密码
- SSH Username with private key: 使用SSH用户和密钥
- Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
- Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
- Certificate:通过上传证书文件的方式
常用的凭证类型有:Username with password(用户密码)和SSH Username with private key(SSH密钥)
公钥填入gitea里,方便拉取代码
项目部署
一、自由风格的html项目
1. 源码在gitea上,需要先安装git插件
2. 安装凭证管理插件
拉取代码,需要认证
3. 新建任务
4.拉取源码
5.clone下来的文件,拷贝到其他服务器
拉取代码后,所有文件复制到需要部署的服务器上
二、maven项目:
maven项目同样需要凭证管理插件和git插件,上面安装过了,这里不需要重复安装
maven项目需要安装插件Maven Integration
设置
1.新建maven项目
2.拉取代码
3.构建和构建后操作
三、Vue项目
1.安装配置NodeJS插件
插件里先安装nodejs插件
然后在 系统管理---> 全局工具配置里设置
2. 新建项目拉取源码
3.构建环境设置
4.构建
5.构建后操作
构建脚本里,可以实现这里的功能
四、pipeline部署maven项目
1.安装插件-新建项目
2. 新建任务
3. 编写流水线脚本
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
git credentialsId: '28f422e7-18d1-41f9-84e1-4852e687a666', url: 'git@192.168.0.52:lqh/test_server.git'
}
}
stage('编译') {
steps {
sh '/var/jenkins_home/maven/bin/mvn clean package'
}
}
stage('部署') {
steps {
sh '''scp target/*.jar root@192.168.0.68:/data/java/server/app.jar
ssh root@192.168.0.68 \'/data/java/server/run.sh \' &'''
}
}
}
}
问题处理
插件下载慢
修改升级站点的URL
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
或者
http://mirror.xmission.com/jenkins/updates/update-center.json
Publish over SSH添加SSH Server报错
提示信息:
jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@60373f7]
问题原因
因为生成密钥的openssh的版本过高的原因
生成密钥
[root@localhost ~]# ssh-keygen -t rsa
查看所生成私钥的格式:
[root@localhost ~]# cat .ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
MIIEpAIBAAKCAQEAwH8MKZFzlp8gRMlfd9BnMXboe6J8k75WMXVx63l7jmkh2XBY
Ygrd72jAZF/2KIYX8/a49arPGnf7qC9x40VUwXlY4BbxOEyXLMVXRDZJ6UHDokqU
ny9NqjSssGKXcaoH9gu7a8A/mEEJhlLcKHWFD8SnkmNwdDFxHUQJVhS6utGm2aAA
IWGJpGhoyVhsRr/qi/NAbt6xXLUwoFY9A974Uq9Zm403v99rHRx95ranLzGR7BJA
可以看到密钥的首行是:
-----BEGIN OPENSSH PRIVATE KEY-----
jenkins 2.2.89.1 版本在检验密钥时还不支持这种格式
问题解决
[root@localhost ~]# ssh-keygen -m PEM -t rsa -b 4096
参数解释
-m 参数指定密钥的格式,PEM是rsa之前使用的旧格式
-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。
-m key_format
Specify a key format for the -i (import) or -e (export) conversion options. The supported key formats are: “RFC4716” (RFC
4716/SSH2 public or private key), “PKCS8” (PEM PKCS8 public key) or “PEM” (PEM public key). The default conversion format is “RFC4716”
查看密钥格式
[root@localhost .ssh]# cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAv/cWf+0TxjN1JXbxscgF9trmAPsR5bKZOzOcgi+OSHcINoQh
9LL578hNNKFviwku+KalEpN98WeWof5wVaM3VmWIQkMp/9YvMzev+Y9Sx7USoeAO
IW5qFQnp5LxVLLTX0nsdcg+nN96eekQ2ZwSb32znatZEeZdmnVPvmACQE4PMYl89
可以看到密钥的首行是:
-----BEGIN RSA PRIVATE KEY-----
重新添加私钥,问题解决