页面“部署私有Docker私有镜像仓库 harbor Registry-Docker”与“Pipeline”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
 
→‎vue
 
第1行: 第1行:
=高级之Harbor=
+
=Jenkins Pipeline 简介=
[https://www.cnblogs.com/bytefish/p/8452190.html 安装Harbor1.4.0开源docker镜像仓库(含letsencrypt证书]
+
Jenkins pipeline 是 Jenkins 2.0 的精髓,,是帮助 Jenkins 实现 CI 到 CD 转变的重要角色。
  
https://blog.51cto.com/u_13043516/2365284
+
简单来说,就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。
  
=初入门=
+
Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本,并且 Jenkins 支持从代码库直接读取脚本,从而实现了 Pipeline as Code 的理念。
<pre>
 
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry:2
 
  
93602b4311e2        k8s.gcr.io/pause:3.1  "/pause"
+
[https://www.cnblogs.com/itech/p/5633948.html  jenkins2 pipeline入门 ]
  
commit 将一个容器提交成镜像 和指定tag
+
官方文档
root@k8s-node1:~# docker commit 93602b4311e2  192.168.88.59:5000/mypause:v1
+
流水线可以通过以下任一方式来创建:
335sha256:0937ae67cb675168c23ede1e15408d19d235112a892f1c095c33404f50c9bf9f
 
  
docker push 192.168.88.59:5000/mypause:v1
+
    通过 Blue Ocean - 在 Blue Ocean 中设置一个流水线项目后,Blue Ocean UI 会帮你编写流水线的 Jenkinsfile 文件并提交到源代码管理系统。
  
</pre>
+
    通过经典 UI - 你可以通过经典 UI 在 Jenkins 中直接输入基本的流水线。
  
=使用Docker Registry=
+
    在源码管理系统中定义 - 你可以手动编写一个 Jenkinsfile 文件,然后提交到项目的源代码管理仓库中。[3]
  
== docker 运行==
+
使用两种方式定义流水线的语法是相同的。尽管 Jenkins 支持在经典 UI 中直接进入流水线,但通常认为最好的实践是在 Jenkinsfile 文件中定义流水线,Jenkins 之后会直接从源代码管理系统加载。
如何 docker-compose
 
  
 +
=Jenkins Pipeline 支持两种语法=
 
<pre>
 
<pre>
info  Registry server 192.168.88.52
 
  
mkdir  /data/registry
 
#指定目录比指定配置文件更加重要
 
docker run -d \
 
  -p 5000:5000 \
 
  --restart=always \
 
  --name registry \
 
  -v /data/registry:/var/lib/registry \
 
  registry:2
 
  
 +
My-pipeline-job01 ->流水线语法    我好像没怎么用
  
 +
Jenkins Pipeline 支持两种语法,一种 Declarative Pipeline(声明式),一种 ScriptedPipeline(脚本式)。
  
docker images
+
安装pipeline相关插件 全部要显示为Success  pending是不行的
REPOSITORY              TAG                IMAGE ID            CREATED            SIZE
 
php                    7.1-fpm-alpine      cbfebc795f0b        4 weeks ago        70.1MB
 
  
docker tag php:7.1-fpm-alpine  192.168.88.52:5000/php
 
  
[root@localhost ~]# docker push 192.168.88.52:5000/php
+
声明式的 Pipeline 限制用户使用严格的预选定义的结构,是一种声明
The push refers to repository [192.168.88.52:5000/php]
+
式的编程模型,对比脚本式的 Pipeline 学习起来更加简单;
Get https://192.168.88.52:5000/v2/: http: server gave HTTP response to HTTPS client
 
  
vi  /etc/docker/daemon.json
+
脚本式的 Pipeline 限制比较少,结构和语法的限制由 Groovy 本身决定,是一种命令式的编程模型。
{ "insecure-registries":["192.168.88.52:5000"] }
+
所以我们学习使用声明式的方式编写 jenkinsfile。
 +
一般来说 jenkinsfile 会被放在代码库的根目录下。
  
systemctl restart docker
+
当然也可以在 Web 页面定义。
  
#再次push成功
+
下面是两种不同方式的 jenkinsfile 示例
docker push 192.168.88.52:5000/php
 
 
</pre>
 
</pre>
 
+
==Jenkinsfile (声明式)==
=配置SSL证书及nginx反向代理docker registry=
 
==SSL证书生成==
 
  
 
<pre>
 
<pre>
  
 +
pipeline {
 +
    agent any
 +
    stages {
 +
        stage('Build') {
 +
            steps {
 +
                echo 'Building..'
 +
                }
 +
            }
 +
            stage('Test') {
 +
                steps {
 +
                    echo 'Testing..'
 +
                }
 +
            }
 +
            stage('Deploy') {
 +
                steps {
 +
                    echo 'Deploying....'
 +
                }
 +
            }
 +
        }
 +
    }
  
搭建私有CA,初始化CA环境,在/etc/pki/CA/下建立证书索引数据库文件index.txt和序列号文件serial,并为证书序列号文件提供初始值。
+
前面我们说过,声明式的Pipeline有严格的预定义格式结构,有固定的格式,外层必须是pipeline{},
# touch /etc/pki/CA/{index.txt,serial}
+
紧接着是 agent  就是节点node ,agent也是固定的,pipeline紧跟着进来 一定是agent 参考上面的格式  后面的any是任何节点还是其中一个节点,指定某一个节点是自己指定,通过标签自己来指定节点
# echo 01 > /etc/pki/CA/serial
 
  
 +
指示 Jenkins 分配一个执行器和工作空间来执行下面的 Pipeline,
  
生成密钥并保存到/etc/pki/CA/private/cakey.pem
+
  stages和steps是申明式Jenkinsfile必须的,stages是一个个阶段,所有的stage必须要定义在stages里,
# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
 
  
生成根证书
+
stages(‘’) 括号里面是名称,这个阶段是什么名称,stages这个名称不能重复,同一个stage名称只能有一个
# openssl req -new -x509 -key  /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
 
  
 +
每一个stage下的 step 要定义在一个 steps 里,stages里面包含了step,具体的执行步骤都写在step里面 ,一行一个,可以写多行
 +
</pre>
 +
 +
==Jenkinsfile(脚本式)==
 +
<pre>
  
需要填写的信息:
+
node {
 +
    stage('Build') {
 +
        //
 +
    }
 +
    stage('Test') {
 +
        //
 +
    }
 +
    stage('Deploy') {
 +
        //
 +
    }
 +
}
  
Country Name (2 letter code) [XX]:CN
+
在脚本式 jenkinsfile 里,你可以定义一个 node 或者多个 node 块,然后在 node 块里
State or Province Name (full name) []:Beijing 
+
定义你的 stage,在 stage 里定义你的 step 即可
Locality Name (eg, city) [Default City]:Beijing
+
</pre>
Organization Name (eg, company) [Default Company Ltd]:hub
 
Organizational Unit Name (eg, section) []:ops
 
Common Name (eg, your name or your server's hostname) []:hub.com
 
Email Address []:[email protected]
 
  
 +
=进阶advance=
  
使系统信任根证书
+
[https://www.jenkins.io/zh/doc/book/pipeline/getting-started/ .jenkins.io/zh/doc/book  流水线入门]
cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt
 
  
安装nginx
+
[https://www.jenkins.io/zh/doc/book/pipeline/getting-started/ jenkins.io 流水线入门]
yum install  openssl模块已有
 
  
 +
[https://zhuanlan.zhihu.com/p/143552791 Jenkins 声明式流水线的语法错误检查]
  
签发证书
+
[https://www.cnblogs.com/mingerlcm/p/12806076.html  Pipeline 语法生成器]
创建ssl目录用来存放密钥文件和证书申请文件
 
  
mkdir /app/nginx/conf/ssl
+
[https://www.jenkins.io/zh/doc/book/pipeline/syntax/ 流水线语法]
  
创建密钥文件和证书申请文件
 
(umask 077;openssl genrsa -out /app/nginx/conf/ssl/docker.key 2048)
 
openssl req -new -key /app/nginx/conf/ssl/docker.key -out /app/nginx/conf/ssl/docker.csr
 
  
 +
Jenkins2 下载与启动
 +
jenkins2 插件安装
 +
jenkins2 hellopipeline
 +
jenkins2 pipeline介绍
 +
jenkins2 javahelloworld
 +
jenkins2 groovy入门
 +
jenkins2 pipeline入门
 +
jenkins2 pipeline高级
 +
jenkins2 Jenkinsfile
 +
jenkins2 multibranch
 +
jenkins2 Jenkinsfile和load
 +
jenkins2 groovy脚本参考
 +
jenkins2 pipeline实例
 +
jenkins2 pipeline插件的10个最佳实践
 +
jenkins2 pipeline 语法快速参考
  
填写的申请信息前四项要和私有CA的信息一致
+
https://www.cnblogs.com/itech/category/245402.html?page=3
  
Country Name (2 letter code) [XX]:CN
 
State or Province Name (full name) []:Beijing
 
Locality Name (eg, city) [Default City]:Beijing
 
Organization Name (eg, company) [Default Company Ltd]:hub
 
Organizational Unit Name (eg, section) []:ops
 
Common Name (eg, your name or your server's hostname) []:hub.com
 
Email Address []:[email protected]
 
  
Please enter the following 'extra' attributes
+
[https://www.cnblogs.com/itech/p/5646219.html  jenkins2 pipeline高级 ]
to be sent with your certificate request
 
A challenge password []: #直接回车
 
An optional company name []:
 
  
 +
=pipeline for example=
  
签署,证书
 
openssl ca -in /app/nginx/conf/ssl/docker.csr -out /app/nginx/conf/ssl/docker.crt -days 3650
 
  
output 省
+
其实就是有点像share library
Certificate is to be certified until Jun 30 02:55:22 2029 GMT (3650 days)
+
流水线 -->定义
Sign the certificate? [y/n]:y
+
<gallery>
 +
Jul012021Z1.png
 +
</gallery>
  
 +
然后有个叫jenkinsfile
  
1 out of 1 certificate requests certified, commit? [y/n]y
+
[https://blog.51cto.com/u_13760351/2527263  Jenkins--pipline 流水线部署Java后端项目]
Write out database with 1 new entries
 
Data Base Updated </pre>
 
  
===配置nginx反向代理docker registry===
+
[https://blog.51cto.com/u_13760351/2526052  本地java代码上传Gitlab仓库]
<pre>
 
添加认证
 
yum -y install httpd-tools
 
  
#docker-registry.htpasswd 文件看nginx 的配置文件便可知
+
[https://blog.51cto.com/u_13760351/2382103  Jenkins自动部署发布Java代码(完整教程]
htpasswd  -c /etc/nginx/conf.d/docker-registry.htpasswd test
+
==java sprint boot ==
New password:
+
Jenkins Pipeline 部署 SpringBoot 应用
Re-type new password:
 
Adding password for user test
 
  
 +
===java===
 +
<pre>修改/etc/profile文件,添加JAVA_HOME
  
[root@localhost conf.d]# cat  docker-registry.conf
+
vi /etc/profile
 +
在文件的最后面,加上以下代码
 +
export JAVA_HOME=/java/jdk1.8.0_171
 +
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 +
export PATH=$JAVA_HOME/bin:$PATH
  
upstream docker-registry {
+
#me on kali xps
        server 127.0.0.1:5000;
+
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
    }
+
export M2_HOME=/usr/local/maven3
server {
+
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
    listen 80;
 
    server_name hub.com;
 
    return  301 https://$server_name$request_uri;
 
}
 
    server {
 
        listen      443;
 
        server_name  hub.com;
 
        #charset koi8-r;
 
   
 
        #access_log  logs/host.access.log  main;
 
        ssl                  on;
 
        ssl_certificate      /app/nginx/conf/ssl/docker.crt;
 
        ssl_certificate_key  /app/nginx/conf/ssl/docker.key;
 
 
 
        chunked_transfer_encoding on;
 
 
 
            proxy_set_header        X-Forwarded-Proto "https";
 
                    client_max_body_size 1G;
 
                    proxy_connect_timeout 3000;
 
                    proxy_send_timeout 3000;
 
                    proxy_read_timeout 3000;
 
                    proxy_buffering    off;
 
                    tcp_nodelay        on;
 
 
 
 
 
        proxy_set_header Host $host;
 
        proxy_set_header X-Real-IP $remote_addr;
 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
        add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
 
 
        location / {
 
          auth_basic  "Docker registry";
 
              auth_basic_user_file /etc/nginx/conf.d/docker-registry.htpasswd;
 
              proxy_pass  http://docker-registry;
 
        }
 
        location /_ping{
 
              auth_basic off;
 
              proxy_pass  http://docker-registry;
 
              }
 
        location /v2/_ping{
 
              auth_basic off;
 
              proxy_pass  http://docker-registry;
 
        }
 
}
 
 
 
 
 
systemctl  restart nginx
 
 
</pre>
 
</pre>
  
=== registry  usage===
+
===maven ===
<pre>
+
<pre>wget -c https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
如果没有DNS解析内网域名,修改hosts文件
+
tar zxf apache-maven-3.8.1-bin.tar.gz
cat >>/etc/hosts <<EOF
+
mv apache-maven-3.1.1 /usr/local/maven3
192.168.88.52 hub.com
 
EOF
 
 
 
systemctl daemon-reload
 
systemctl restart docker
 
  
登录
+
vi /etc/profile然后还需要 配置环境变量。 #在适当的位置添加
[root@localhost conf.d]#  docker login hub.com
 
Username: test
 
Password:
 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
 
Configure a credential helper to remove this warning. See
 
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 
  
Login Succeeded
+
export M2_HOME=/usr/local/maven3
 +
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
  
把一个容器提交为images
+
保存退出后运行下面的命令使配置生效,或者重启服务器生效。
[root@localhost conf.d]# docker  ps
+
source /etc/profile
CONTAINER ID        IMAGE              COMMAND                  CREATED            STATUS              PORTS                    NAMES
 
6d5f17124090        registry:2          "/entrypoint.sh /etc…"  2 hours ago        Up 20 minutes      0.0.0.0:5000->5000/tcp  registry
 
[root@localhost conf.d]# docker commit 6d5f17124090 hub.com/registry:v2
 
sha256:d7af5d03593d7f60903dc9da2b9a4d1d0a1a70878e0a7a09423372261cb4fccb
 
[root@localhost conf.d]# docker push hub.com/registry:v2
 
The push refers to repository [hub.com/registry]
 
  
上传镜像
+
验证版本
 +
mvn -v
  
docker tag  nginx hub.com/nginx
+
出现maven版本即成功
docker push  hub.com/nginx
 
 
 
查看
 
curl -u test:test https://hub.com/v2/_catalog
 
{"repositories":["httpd","nginx","php"]}
 
  
 +
阿里云源
  
 +
<mirrors>
 +
    <mirror>
 +
      <id>alimaven</id>
 +
      <name>aliyun maven</name>
 +
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 +
      <mirrorOf>central</mirrorOf>       
 +
    </mirror>
 +
</mirrors>
 
</pre>
 
</pre>
  
==client==
+
===安装Jenkins部署SpringBoot应用===
<pre>
+
jenkins 安装过程省略
局域网内其他机器认证(192.168.88.60 ubuntu
 
  
其它机器
+
登陆之后进入Manage Jenkins -> Global Tool Configuration 中进行配置Maven,Git,JDK
cat >>/etc/hosts <<EOF
+
可能不同环境有小许要修改
192.168.88.52 hub.com
 
EOF
 
  
把CA的密钥发送到客户机,并添加到ca-bundle.crt
+
<gallery>Jul012021j1.png</gallery>
  
on 60
+
===新建Pipeline 项目===
mkdir -p /etc/pki/tls/certs/
+
新建Item --> 名就叫 01_Eureka  再选中pipeline 最后确定  -->
  
on 52
+
配置Git仓库:
scp -p /etc/pki/tls/certs/ca-bundle.crt  [email protected]:/etc/pki/tls/certs/ca-bundle.crt
+
http://mygitlab.com/root/01_eureka.git
scp -p /etc/pki/CA/cacert.pem root@192.168.88.60:/etc/pki/CA/cacert.pem
 
  
#on 60
 
cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt
 
重启docker
 
systemctl  restart  docker
 
 
</pre>
 
 
=trouble=
 
 
<pre>
 
<pre>
问题
+
tree .
 +
.
 +
└── jenkins_files
 +
    └── 01_eureka
  
[root@localhost conf.d]# docker login hub.com
+
1 directory, 1 file
Username: test
 
Password:
 
Error response from daemon: login attempt to https://hub.com/v2/ failed with status: 404 Not Found
 
  
host 搞错 要前面是ip 后面是域名
+
#脚本式
 +
cat jenkins_files/01_eureka
  
 
+
node {
一开始注释了ssl证书
+
  def mvnHome
Username: test
+
  def workspace = pwd()
Password:  
+
  def project_name = 'eureka-server-1.0.0.jar'
Error response from daemon: Get https://hub.com/v2/: http: server gave HTTP response to HTTPS client
+
  def project_log = 'eureka-server-1.0.0.log'
 
+
  def project_home = 'app-centre/eureka-server'
ssl err
+
  def vm_ip = 'xxx.xxx.xxx.xxx'
 
+
  def vm_port = '22'
 
+
  def vm_user = 'root'
#on ubuntu
+
  //代码获取
root@k8s-node2:~# docker login hub.com
+
  stage('Preparation') { // for display purposes
Username: test
+
  git branch: 'master',
Password:
+
  url:' https://gitee.com/didispace/didi-eureka-server.git'
Error response from daemon: Get https://hub.com/v2/: x509: certificate signed by unknown authority
+
  }
 
+
  //构建
cat /etc/docker/daemon.json
+
  stage('Build') {
{
+
      // Run the maven build
   "insecure-registries" : ["hub.com"]
+
      if (isUnix()) {
 +
        sh "/usr/local/maven3/bin/mvn -Dmaven.test.skip=true clean package"
 +
   
 +
      } else {
 +
        bat(/mvn -Dmaven.test.skip=true clean package/)
 +
      }
 +
  }
 +
 
 +
  //移动
 +
  stage('MV') {
 +
    sh "mv ${project_home}/target/${project_name} /usr/local/src/"
 +
  }
 +
 
 +
  //上传到服务器
 +
  stage('Upload VM') {
 +
    sh "scp -P ${vm_port} /usr/local/src/${project_name} ${vm_user}@${vm_port}:/usr/local/src/bk"
 +
//sh "ssh -p ${vm_port} ${vm_user}@${vm_ip} 'nohup java -jar /usr/local/src/${project_name} >> ${project_log} '"
 +
  }
 +
 
 +
 
 +
  //运行JAR包
 +
   stage('Run') {
 +
//sh "if (ps -ef| grep java|grep ${project_name})then (ps -ef| grep java|grep ${project_name}| awk '{print \$2}'|xargs kill -9) fi"
 +
    sh "ssh -p ${vm_port} ${vm_user}@${vm_ip} 'nohup java -jar /usr/local/src/${project_name} >${project_log} 2>&1 &'"
 +
  }
 
}
 
}
 
systemctl  restart docker
 
 
 
</pre>
 
==docker push unknown blob  received unexpected HTTP status: 502 Bad Gateway==
 
<pre>
 
docker  push hub.com/httpd:2.4.16
 
最后老是
 
unknown blob
 
 
nginx 配置文件问题?
 
 
received unexpected HTTP status: 502 Bad Gateway
 
 
解决办法 在nginx.conf add
 
proxy_set_header        X-Forwarded-Proto "https";
 
                    client_max_body_size 1G;
 
                    proxy_connect_timeout 3000;
 
                    proxy_send_timeout 3000;
 
                    proxy_read_timeout 3000;
 
                    proxy_buffering    off;
 
                    tcp_nodelay        on;
 
 
 
 
 
proxy_set_header Host $host;
 
        proxy_set_header X-Real-IP      $remote_addr;
 
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
 
 
 
</pre>
 
</pre>
  
=see also=
+
流水线选项卡
 
+
定义 : pipeline script from SCM
[https://www.cnblogs.com/Eivll0m/p/7089675.html 搭建私服-docker registry]
+
SCM  repository URl http://mygitlab.com/root/01_eureka.git
  
 +
Credentials 你的用户和密码
  
https://docs.docker.com/registry/configuration/
+
指定分支(为空时代表any) 我这里为 */main
  
[https://my.oschina.net/u/4126211/blog/4540959 Docker 私有镜像仓库的搭建及认证]
+
脚本路径  jenkins_files/01_eureka
  
[https://blog.csdn.net/YoungAngelGirl/article/details/80031845 k8s实战之从私有仓库拉取镜像 - kubernetes]
+
====see also springboot ====
 +
[https://www.cnblogs.com/SimpleWu/p/13262966.html Jenkins Pipeline 部署 SpringBoot 应用 ]
  
[https://blog.csdn.net/fenggj19870/article/details/82752554 docker login x509: certificate signed by unknown authority]
+
[https://juejin.cn/post/6844903955600769031 最优雅的Docker+Jenkins pipeline部署Spring boot项目 ]
  
[https://blog.csdn.net/www203203/article/details/58105177 docker push 出现:x509: certificate signed by unknown authority]
+
=== Pipeline流水线+ Docker(docker java应用)实现自动化CI/CD发布Java项目===
  
https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry
+
[https://blog.51cto.com/u_13043516/2365284 Jenkins+Pipeline流水线+Docker实现自动化CI/CD发布Java项目]
 +
=== vue ===
  
 +
[https://juejin.cn/post/6844903955634323469 最优雅的Docker+Jenkins pipeline部署vue项目,前端项目都可参考 ]
  
[https://www.jianshu.com/p/94eb79825372 Docker Hub 仓库使用,及搭建 Docker Registry]
+
=docker=
  
[https://blog.csdn.net/KingBoyWorld/article/details/80109916 docker通过代理上传https协议的私服地址报错unknown blob]
+
[https://www.jenkins.io/doc/book/pipeline/docker/ Using Docker with Pipeline,官方文档]
 +
=是Blue Ocean=
 +
https://www.jenkins.io/zh/doc/book/blueocean/
  
 +
Blue Ocean 重新思考Jenkins的用户体验,从头开始设计Jenkins Pipeline, 但仍然与自由式作业兼容,Blue Ocean减少了混乱而且进一步明确了团队中每个成员 Blue Ocean 的主要特性包括:
  
[https://blog.csdn.net/jiangyu1013/article/details/84339469 解决:Error response from daemon: Get https://index.docker.io/v1/search?q=openjdk&n=25: dial tcp: looku]
+
    持续交付(CD)Pipeline的 复杂可视化 ,可以让您快速直观地理解管道状态。
 +
    Pipeline 编辑器 - 引导用户通过直观的、可视化的过程来创建Pipeline,从而使Pipeline的创建变得平易近人。
 +
    个性化 以适应团队中每个成员不同角色的需求。
 +
    在需要干预和/或出现问题时 精确定位 。 Blue Ocean 展示 Pipeline中需要关注的地方, 简化异常处理,提高生产力
 +
    本地集成分支和合并请求, 在与GitHub 和 Bitbucket中的其他人协作编码时实现最大程度的开发人员生产力。
  
[https://blog.csdn.net/xiaolummhae/article/details/51840881 docker login CA认证问题/添加自签发的 SSL 证书为受信任的根证书]
+
简言之:简化复杂可视化,提供更个性直观的界面,可以精准定位构建失败的位置
  
[https://blog.csdn.net/mimica247706624/article/details/80724900 CentOS7.4 Docker Harbor registry基于Https方式安全认证私有仓库搭建]
+
[https://www.cnblogs.com/hellxz/p/pipeline_maven_build.html  Jenkins教程(四)安装BlueOcean与Maven构建 ]
  
 +
=see also=
 +
[https://www.cnblogs.com/mingerlcm/p/12790884.html Jenkins Pipeline介绍]
  
[https://blog.csdn.net/xcjing/article/details/70238273 搭建一个支持HTTPS的私有DOCKER Registry]
+
[https://www.cnblogs.com/mingerlcm/p/12727253.html jenkins从头到尾 目录]
 
 
[https://blog.csdn.net/bingoxubin/article/details/78726092 docker私有仓库]
 
  
[https://blog.csdn.net/qq_42114918/article/details/81609465 Docker搭建本地仓库registry]
+
[https://www.cnblogs.com/mingerlcm/p/12799362.html Jenkins Pipeline示例]
  
[https://www.cnblogs.com/xcloudbiz/articles/5526262.html 部署私有Docker Registry]
+
[https://www.cnblogs.com/mingerlcm/p/12799493.html 使用 pipeline 实现 monitor 仓库代码的发布 ]
  
[https://chuansongme.com/n/1134213 Moving to Docker(二):搭建一个私有registry服务]
+
[https://www.cnblogs.com/itech/p/12747748.html  Jenkins pipeline jenkinsfile的两种写作方式声明式和脚本式 ]
  
==other==
+
[https://objcoding.com/2019/02/16/docker-jenkins-pipeline/ 基于Jenkins Pipeline自动化部署知道个过程而已]
[https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-on-centos-7 How To Create a Self-Signed SSL Certificate for Nginx on CentOS 7]
 
  
[https://www.cnblogs.com/piscesLoveCc/p/6120875.html Nginx启动SSL功能,并进行功能优化]
 
  
[https://blog.csdn.net/u012486840/article/details/52610320 CentOS 7 yum 安装 Nginx]
+
[https://www.jianshu.com/p/bcd42b4f9885 Jenkins + Pipeline 自动化部署项目]
  
=changelog=
+
[https://www.jianshu.com/p/daf32c908ff9 Jenkins + Pipeline 构建流水线发布]
2019年 07月 03日 星期三 16:23:35 CST 添加ssl
 
  
[[category:Container]]
+
[https://www.cnblogs.com/itech/p/12747740.html  Jenkins pipeline之声明式的jenkinsfile ]
 +
[[category:ops]] [[category:devops]]

2021年7月1日 (四) 13:42的版本

Jenkins Pipeline 简介

Jenkins pipeline 是 Jenkins 2.0 的精髓,,是帮助 Jenkins 实现 CI 到 CD 转变的重要角色。

简单来说,就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。

Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本,并且 Jenkins 支持从代码库直接读取脚本,从而实现了 Pipeline as Code 的理念。

jenkins2 pipeline入门

官方文档 流水线可以通过以下任一方式来创建:

   通过 Blue Ocean - 在 Blue Ocean 中设置一个流水线项目后,Blue Ocean UI 会帮你编写流水线的 Jenkinsfile 文件并提交到源代码管理系统。
   通过经典 UI - 你可以通过经典 UI 在 Jenkins 中直接输入基本的流水线。
   在源码管理系统中定义 - 你可以手动编写一个 Jenkinsfile 文件,然后提交到项目的源代码管理仓库中。[3]

使用两种方式定义流水线的语法是相同的。尽管 Jenkins 支持在经典 UI 中直接进入流水线,但通常认为最好的实践是在 Jenkinsfile 文件中定义流水线,Jenkins 之后会直接从源代码管理系统加载。

Jenkins Pipeline 支持两种语法



My-pipeline-job01 ->流水线语法    我好像没怎么用 

Jenkins Pipeline 支持两种语法,一种 Declarative Pipeline(声明式),一种 ScriptedPipeline(脚本式)。

安装pipeline相关插件  全部要显示为Success  pending是不行的


声明式的 Pipeline 限制用户使用严格的预选定义的结构,是一种声明
式的编程模型,对比脚本式的 Pipeline 学习起来更加简单;

脚本式的 Pipeline 限制比较少,结构和语法的限制由 Groovy 本身决定,是一种命令式的编程模型。
所以我们学习使用声明式的方式编写 jenkinsfile。
一般来说 jenkinsfile 会被放在代码库的根目录下。

当然也可以在 Web 页面定义。

下面是两种不同方式的 jenkinsfile 示例

Jenkinsfile (声明式)


pipeline { 
    agent any
    stages { 
        stage('Build') { 
            steps { 
                echo 'Building..' 
                } 
            } 
            stage('Test') { 
                steps { 
                    echo 'Testing..' 
                } 
            } 
            stage('Deploy') { 
                steps { 
                    echo 'Deploying....' 
                } 
            } 
        }
    }

前面我们说过,声明式的Pipeline有严格的预定义格式结构,有固定的格式,外层必须是pipeline{},
紧接着是 agent  就是节点node ,agent也是固定的,pipeline紧跟着进来 一定是agent 参考上面的格式  后面的any是任何节点还是其中一个节点,指定某一个节点是自己指定,通过标签自己来指定节点

指示 Jenkins 分配一个执行器和工作空间来执行下面的 Pipeline,

 stages和steps是申明式Jenkinsfile必须的,stages是一个个阶段,所有的stage必须要定义在stages里,

stages(‘’) 括号里面是名称,这个阶段是什么名称,stages这个名称不能重复,同一个stage名称只能有一个

每一个stage下的 step 要定义在一个 steps 里,stages里面包含了step,具体的执行步骤都写在step里面 ,一行一个,可以写多行

Jenkinsfile(脚本式)


node { 
    stage('Build') { 
        // 
    } 
    stage('Test') { 
        // 
    } 
    stage('Deploy') { 
        // 
    } 
}

在脚本式 jenkinsfile 里,你可以定义一个 node 或者多个 node 块,然后在 node 块里
定义你的 stage,在 stage 里定义你的 step 即可

进阶advance

.jenkins.io/zh/doc/book 流水线入门

jenkins.io 流水线入门

Jenkins 声明式流水线的语法错误检查

Pipeline 语法生成器

流水线语法


Jenkins2 下载与启动 jenkins2 插件安装 jenkins2 hellopipeline jenkins2 pipeline介绍 jenkins2 javahelloworld jenkins2 groovy入门 jenkins2 pipeline入门 jenkins2 pipeline高级 jenkins2 Jenkinsfile jenkins2 multibranch jenkins2 Jenkinsfile和load jenkins2 groovy脚本参考 jenkins2 pipeline实例 jenkins2 pipeline插件的10个最佳实践 jenkins2 pipeline 语法快速参考

https://www.cnblogs.com/itech/category/245402.html?page=3


jenkins2 pipeline高级

pipeline for example

其实就是有点像share library 流水线 -->定义

然后有个叫jenkinsfile

Jenkins--pipline 流水线部署Java后端项目

本地java代码上传Gitlab仓库

Jenkins自动部署发布Java代码(完整教程

java sprint boot

Jenkins Pipeline 部署 SpringBoot 应用

java

修改/etc/profile文件,添加JAVA_HOME

vi /etc/profile
在文件的最后面,加上以下代码
export JAVA_HOME=/java/jdk1.8.0_171
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

#me on  kali xps 
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export M2_HOME=/usr/local/maven3
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

maven

wget -c https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz 
tar zxf apache-maven-3.8.1-bin.tar.gz 
mv apache-maven-3.1.1 /usr/local/maven3 

vi /etc/profile然后还需要 配置环境变量。 #在适当的位置添加

export M2_HOME=/usr/local/maven3
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

保存退出后运行下面的命令使配置生效,或者重启服务器生效。
source /etc/profile

验证版本
mvn -v

出现maven版本即成功

阿里云源

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

安装Jenkins部署SpringBoot应用

jenkins 安装过程省略

登陆之后进入Manage Jenkins -> Global Tool Configuration 中进行配置Maven,Git,JDK 可能不同环境有小许要修改

新建Pipeline 项目

新建Item --> 名就叫 01_Eureka 再选中pipeline 最后确定 -->

配置Git仓库: http://mygitlab.com/root/01_eureka.git

tree .
.
└── jenkins_files
    └── 01_eureka

1 directory, 1 file

#脚本式
cat jenkins_files/01_eureka

node {
   def mvnHome
   def workspace = pwd()
   def project_name = 'eureka-server-1.0.0.jar'
   def project_log = 'eureka-server-1.0.0.log'
   def project_home = 'app-centre/eureka-server'
   def vm_ip = 'xxx.xxx.xxx.xxx'
   def vm_port = '22'
   def vm_user = 'root'
   //代码获取
   stage('Preparation') { // for display purposes
	  git branch: 'master',
	  url:' https://gitee.com/didispace/didi-eureka-server.git'
   }
   //构建
   stage('Build') {
      // Run the maven build
      if (isUnix()) {
         sh "/usr/local/maven3/bin/mvn -Dmaven.test.skip=true clean package"
 
      } else {
         bat(/mvn -Dmaven.test.skip=true clean package/)
      }
   }
   
   //移动
   stage('MV') {
     sh "mv ${project_home}/target/${project_name} /usr/local/src/"
   }
   
   //上传到服务器
   stage('Upload VM') {
     sh "scp -P ${vm_port} /usr/local/src/${project_name} ${vm_user}@${vm_port}:/usr/local/src/bk"
	 //sh "ssh -p ${vm_port} ${vm_user}@${vm_ip} 'nohup java -jar /usr/local/src/${project_name} >> ${project_log} '"
   }
   
   
  //运行JAR包
  stage('Run') {
	 //sh "if (ps -ef| grep java|grep ${project_name})then (ps -ef| grep java|grep ${project_name}| awk '{print \$2}'|xargs kill -9) fi"
     sh "ssh -p ${vm_port} ${vm_user}@${vm_ip} 'nohup java -jar /usr/local/src/${project_name} >${project_log} 2>&1 &'"
  }
}

流水线选项卡 定义 : pipeline script from SCM SCM repository URl http://mygitlab.com/root/01_eureka.git

Credentials 你的用户和密码

指定分支(为空时代表any) 我这里为 */main

脚本路径 jenkins_files/01_eureka

see also springboot

Jenkins Pipeline 部署 SpringBoot 应用

最优雅的Docker+Jenkins pipeline部署Spring boot项目

Pipeline流水线+ Docker(docker java应用)实现自动化CI/CD发布Java项目

Jenkins+Pipeline流水线+Docker实现自动化CI/CD发布Java项目

vue

最优雅的Docker+Jenkins pipeline部署vue项目,前端项目都可参考

docker

Using Docker with Pipeline,官方文档

是Blue Ocean

https://www.jenkins.io/zh/doc/book/blueocean/

Blue Ocean 重新思考Jenkins的用户体验,从头开始设计Jenkins Pipeline, 但仍然与自由式作业兼容,Blue Ocean减少了混乱而且进一步明确了团队中每个成员 Blue Ocean 的主要特性包括:

   持续交付(CD)Pipeline的 复杂可视化 ,可以让您快速直观地理解管道状态。
   Pipeline 编辑器 - 引导用户通过直观的、可视化的过程来创建Pipeline,从而使Pipeline的创建变得平易近人。
   个性化 以适应团队中每个成员不同角色的需求。
   在需要干预和/或出现问题时 精确定位 。 Blue Ocean 展示 Pipeline中需要关注的地方, 简化异常处理,提高生产力
   本地集成分支和合并请求, 在与GitHub 和 Bitbucket中的其他人协作编码时实现最大程度的开发人员生产力。

简言之:简化复杂可视化,提供更个性直观的界面,可以精准定位构建失败的位置

Jenkins教程(四)安装BlueOcean与Maven构建

see also

Jenkins Pipeline介绍

jenkins从头到尾 目录

Jenkins Pipeline示例

使用 pipeline 实现 monitor 仓库代码的发布

Jenkins pipeline jenkinsfile的两种写作方式声明式和脚本式

基于Jenkins Pipeline自动化部署知道个过程而已


Jenkins + Pipeline 自动化部署项目

Jenkins + Pipeline 构建流水线发布

Jenkins pipeline之声明式的jenkinsfile