Jenkins
1|0Jenkins安装
1|1在宿主机安装Jenkins
#open jdk
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
#查看版本
java -version
#方式一:官方仓库(太慢太慢太慢)
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
#安装Jeckins
yum install jenkins -y
#方式二:先下载再安装,也慢,不到100k/s 慢慢等算了
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.176.3-1.1.noarch.rpm
rpm -ivh jenkins-2.156-1.1.noarch.rpm
1|2使用docker运行jenkins(推荐)
#一句搞定 -u 0 :run as a root user (uid=0)(否则docker run 的时候 没有写入权限)
#实践表明,应该使用 jenkins/jenkins 镜像
docker run -u 0 -p 8080:8080 -p 50000:50000 -d --restart=always --name jenkins -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins
#nginx(docker)反向代理 jenkins
见下一步
#浏览 http://jenkins.domain.com
#查看token (如果提示找不到,感觉run的时候 -v 映射卷,没有映射上)
cat /data/jenkins_home/secrets/initialAdminPassword
#进入容器内部
docker exec -it fcdba184a17f /bin/bash
#再查看容器内部的token,就有了
cat /var/jenkins_home/secrets/initialAdminPassword
#在jenkins的容器内部,配置镜像加速,不然构建容器的时候会很慢;
#创建目录 -p 不存在就创建
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://rrn1rf2c.mirror.aliyuncs.com"] } EOF
#退出容器,回到宿主机
ctrl+p & ctrl+q
#重启jenkins容器
docker restart jenkins
2|0
2|1nginx(docker)反向代理 jenkins
参考:https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | upstream jenkins { keepalive 32; # keepalive connections #server 127.0.0.1:8080; # jenkins ip and port server 10.6.66.236:8080; #注意:由于nginx和jenkins都运行在docker容器中,所以不能用127.0.0.1 要用服务器的内网IP,否则会报503错误 } server { listen 80; # Listen on port 80 for IPv4 requests server_name jenkins.domain.com; #this is the jenkins web root directory (mentioned in the /etc/default/jenkins file) root /var/run/jenkins/war/ ; #access_log /var/log/nginx/jenkins/access.log; #error_log /var/log/nginx/jenkins/error.log; ignore_invalid_headers off; #pass through headers from Jenkins which are considered invalid by Nginx server. location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" { #rewrite all static files into requests to the root #E.g /static/12345678/css/something.css will become /css/something.css rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last; } location /userContent { #have nginx handle all the static requests to the userContent folder files #note : This is the $JENKINS_HOME dir root /var/lib/jenkins/ ; if (!-f $request_filename){ #this file does not exist, might be a directory or a /**view** url rewrite (.*) /$1 last; break ; } sendfile on; } location / { sendfile off; proxy_pass http: //jenkins ; proxy_redirect default; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_max_temp_file_size 0; #this is the maximum upload size client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffering off; proxy_request_buffering off; # Required for HTTP CLI commands in Jenkins > 2.54 proxy_set_header Connection "" ; # Clear for keepalive } } |
3|0 Jenkins配置
3|1基础配置
#Jenkins时区设置为北京时间 :
在设置中可以设置时区为:Asia/Shanghai
#也可以:打开 【系统管理】->【脚本命令行】运行下面的命令
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
#配置发件人邮箱和SMTP
3|2安装插件
#配置插件更新源,以加快插件安装速度 ,参考:https://www.cnblogs.com/hellxz/p/jenkins_install_plugins_faster.html
cd /data/jenkins_home/updates
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
#安装插件
Git:从Git拉去代码
Chinese: 中文
Docker : 提供docker 构建和发布
SSH : 提供通过SSH在远程主机执行命令,用于部署服务
maven : 支持maven
3|3Docker配置
目的:
#系统管理-系统设置-云 :新增 Name:Docker Docker Host URI:tcp://10.6.66.229:2375
3|4SHH主机配置
#系统管理-系统设置-SSH remote hosts
SSH sites:新增
Hostname:10.6.66.229
Port:22
Credentials: (需要添加一个docker宿主机的用户,作为凭证)
serverAliveInterval:0
timeout:0
#创建一个jenkins用户 ,要吧用户加入到docker组,否则jenkins中远程执行docker命令时,会提示没有权限
useradd -s /bin/sh -g root -G docker -d /home/jenkinsUser -m jenkinsUser
#设置密码
passwd jenkinsUser
3|5Git配置
参考:https://www.jianshu.com/p/3ce69c25a92b
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #进入jenkins容器 docker exec -it jenkins bash #本地生成密钥 ,三次回车 ssh -keygen -t rsa #查看已生成的公钥 包含前面的 ssh-rsa cat /root/ . ssh /id_rsa .pub <br> ssh -rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVSEt++chzy9aDAIBf3 /MF9e5vT5f +I0N45LatqlwyUPAZte6x+79fqid8BmkRB+L3Q2JJfBEAALj+0HFCRyITTBoYhRNU48y0WG49a5O2tNEoRB3RYv9B+VN2wFIBQXGevO1nusYihK8W0CdzQulc0WGu8ImvjEqVBTjs5A+pSyO06QlnutVC /Bs5GKBLyeuTIVAC74vFNAQI6irun9/neBpICzUE1VhacyVTr6QQXmRiCi +axkEMnV4BN9VEoi7Zdo /2oJ76EHRXBs5SgeBLT53H56L9jl/xc1xzPFP0JeLOcAKGqZiszcOcQxMg1pdj88zkXwagDDZ0qoZNmMeL #将公钥加入Git-Project中 #参考:阿里云code->设置->SSH公钥->生成密钥: <a href="https://code.aliyun.com/help/ssh/README" rel="noopener nofollow">https://code.aliyun.com/help/ssh/README</a> code.aliyun.com->设置->SSH公钥->增加 SSH 密钥 #查看生成的私钥 cat . ssh /id_rsa #配置Jenkins凭据 Jenkins>凭据>全局凭据>添加凭据,类型选择SSH Username with private key,Private Key中输入上一步中查看的私钥。<br>(包括第一行和最后一行) |
4|0Jenkins使用
4|1新建任务
#新建任务:选择自由风格
#源码管理:
1.选择Git,Repository URL:填写项目的git地址
2.按上一步创建公钥和私钥
3.在gitlab中添加公钥id_rsa.pub
4.添加凭据:
类型:选择SSH
UserName:git
选择Enter directly, 点击Add ,填写上一步生成的 私钥id_rsa
#构建触发器:触发远程构建
1.输入身份令牌,如:123456
2.将url填写到git的webhooks中:http://JENKINS_URL/job/xms/build?token=123456
3.jenkins->系统管理->全局安全配置->勾选 匿名用户具有可读权限
#构建触发器
1.选择:轮询 SCM
输入 H/2 * * * *
设置两分钟拉取一次
2.使用webhooks远程出发构建
#构建:见下一步
4|2构建流程
第0步:在Docker Swarm Manager节点上的主机目录上,编写docker-compose.yml,编排容器和服务;
第1步:先从Git拉取代码
第2步:添加构建步骤:Build / Publish Docker Image
1.根据代码中的Dockerfile构建Images;
2.将构建好的Image,push到仓库;
第3步:添加构建步骤:Execute shell script on remote host using ssh
cd /data/dicker/compose/xplan #docker-compose.yml所在目录 docker stack down xplan #下线 docker stack deploy -c docker-compose.yml xplan #重新部署
或者,单应用,直接操作容器
1 2 3 4 5 6 7 | REPOSITORY=registry-vpc.cn-shanghai.aliyuncs.com /pengyuan/xms #删容器 docker rm -f xms #删镜像 docker rmi -f REPOSITORY #启动一个新容器 docker run -d -p 60001:60001 --restart=always --name xms REPOSITORY |
第4步:提交代码,等待构建和发布;
参考:
https://blog.csdn.net/xiaoxiangzi520/article/details/88842200
【★】Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
ASP.NET Core + Docker +Jenkins 实现持续集成
__EOF__
作 者:码农搞事情
出 处:https://www.cnblogs.com/fmp/p/11486081.html
关于博主:一本正经写程序&不务正业搞事情
版权声明:欢迎分享,转载请注明出处。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?