页面“Gitlab社区版安装和配置”与“Pipeline”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
 
 
第1行: 第1行:
 +
=Jenkins Pipeline 简介=
 +
Jenkins pipeline 是 Jenkins 2.0 的精髓,,是帮助 Jenkins 实现 CI 到 CD 转变的重要角色。
  
== pre ==
+
简单来说,就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。
  
gitlab社区版安装和配置
+
Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本,并且 Jenkins 支持从代码库直接读取脚本,从而实现了 Pipeline as Code 的理念。
  
os: centos6.X
+
[https://www.cnblogs.com/itech/p/5633948.html  jenkins2 pipeline入门 ]
  
==第零 docker-compose for gitlab  ==
+
官方文档
<pre>
+
流水线可以通过以下任一方式来创建:
  
 +
    通过 Blue Ocean - 在 Blue Ocean 中设置一个流水线项目后,Blue Ocean UI 会帮你编写流水线的 Jenkinsfile 文件并提交到源代码管理系统。
  
2020 直接 docker-compose 其实可以上 alpine的
+
    通过经典 UI - 你可以通过经典 UI 在 Jenkins 中直接输入基本的流水线。
  
cat docker-compose.yml
+
    在源码管理系统中定义 - 你可以手动编写一个 Jenkinsfile 文件,然后提交到项目的源代码管理仓库中。[3]
  
 +
使用两种方式定义流水线的语法是相同的。尽管 Jenkins 支持在经典 UI 中直接进入流水线,但通常认为最好的实践是在 Jenkinsfile 文件中定义流水线,Jenkins 之后会直接从源代码管理系统加载。
  
web:
+
=Jenkins Pipeline 支持两种语法=
  image: 'gitlab/gitlab-ce:14.0.0-ce.0'
+
<pre>
  #image: 'gitlab/gitlab-ce:11.4.3'
 
  #image: 'gitlab/gitlab-ce:latest' 
 
  restart: always
 
  hostname: 'mygitlab.com'
 
  environment:
 
    GITLAB_OMNIBUS_CONFIG: |
 
      external_url 'http://gitlab.lliao.net'
 
      #external_url 'https://mygitlab.com'
 
      # Add any other gitlab.rb configuration here, each on its own line
 
  ports:
 
    - '7080:80'
 
    - '4433:443'
 
    - '2222:22'
 
  volumes:
 
    - ./gitlab/config:/etc/gitlab
 
    - ./gitlab/logs:/var/log/gitlab
 
    - ./gitlab/data:/var/opt/gitlab
 
  
  
 +
My-pipeline-job01 ->流水线语法    我好像没怎么用
  
 +
Jenkins Pipeline 支持两种语法,一种 Declarative Pipeline(声明式),一种 ScriptedPipeline(脚本式)。
  
https://mygitlab.com:4433/
+
安装pipeline相关插件  全部要显示为Success  pending是不行的
7080端口好像不行 要改下面的ssh相关就好了
 
  
  
# 下面这个手工的 线上一般不用了 以前学习用的
+
声明式的 Pipeline 限制用户使用严格的预选定义的结构,是一种声明
 +
式的编程模型,对比脚本式的 Pipeline 学习起来更加简单;
  
获取 GitLab 镜像
+
脚本式的 Pipeline 限制比较少,结构和语法的限制由 Groovy 本身决定,是一种命令式的编程模型。
docker search gitlab
+
所以我们学习使用声明式的方式编写 jenkinsfile。
 +
一般来说 jenkinsfile 会被放在代码库的根目录下。
  
docker pull gitlab/gitlab-ce:latest
+
当然也可以在 Web 页面定义。
 
 
查看本地镜像
 
docker images
 
 
 
创建目录
 
 
 
mkdir -p /data/gitlab/{config,data,logs}
 
 
 
创建并运行容器
 
 
 
docker run --detach \
 
      --hostname git.evan.com \
 
      --publish 443:443 \
 
      --publish 80:80 \
 
      --publish 222:22 \
 
      --name gitlabce\
 
      --restart always \
 
      --volume /data/gitlab/config:/etc/gitlab \
 
      --volume /data/gitlab/logs:/var/log/gitlab \
 
      --volume /data/gitlab/data:/var/opt/gitlab \
 
      gitlab/gitlab-ce:latest
 
 
 
 
 
查看运行状态
 
 
 
docker ps
 
netstat -ntulap | grep docker
 
访问 GitLab
 
 
 
启动
 
docker start gitlabce
 
 
 
docker stop gitlabce
 
 
 
http://git.evan.com/
 
 
 
如果没有域名,直接使用 IP 访问即可。
 
初始账户
 
 
 
用户: root
 
密码: 5iveL!fe  现在一般要自己配置密码的了
 
  
 +
下面是两种不同方式的 jenkinsfile 示例
 
</pre>
 
</pre>
 +
==Jenkinsfile (声明式)==
  
[https://docs.gitlab.com/ee/install/docker.html  Install GitLab with Docker]
 
 
==gitlab搭配ssh默认端口引发的问题  ==
 
 
<pre>
 
<pre>
明明 docker-compose.yml  用 了2222端口但还是有问题  rb文件也要改为 2222  这个是为了开外网 给外面的用  例如jenkins 在外面的
 
  
修改sshd_config中的Port #这一步 试过 可以不用操作的
+
pipeline {
service sshd restart
+
    agent any
 +
    stages {
 +
        stage('Build') {
 +
            steps {
 +
                echo 'Building..'
 +
                }
 +
            }
 +
            stage('Test') {
 +
                steps {
 +
                    echo 'Testing..'
 +
                }
 +
            }
 +
            stage('Deploy') {
 +
                steps {
 +
                    echo 'Deploying....'
 +
                }
 +
            }
 +
        }
 +
    }
  
#第一步的我没改哦 好像可以不动
+
前面我们说过,声明式的Pipeline有严格的预定义格式结构,有固定的格式,外层必须是pipeline{},
修改/etc/gitlab/gitlab.rb [再次声明,gitlab.yml中的配置会被这个给覆盖]
+
紧接着是 agent  就是节点node ,agent也是固定的,pipeline紧跟着进来 一定是agent 参考上面的格式  后面的any是任何节点还是其中一个节点,指定某一个节点是自己指定,通过标签自己来指定节点
  
启用下面这行,并把端口改为自己服务器的sshd端口 如果是我常用的 这里50022 应该是2222才对哦
+
指示 Jenkins 分配一个执行器和工作空间来执行下面的 Pipeline,
  
gitlab_rails['gitlab_shell_ssh_port'] = 50022
+
stages和steps是申明式Jenkinsfile必须的,stages是一个个阶段,所有的stage必须要定义在stages里,
  
使之生效,大功告其!
+
stages(‘’) 括号里面是名称,这个阶段是什么名称,stages这个名称不能重复,同一个stage名称只能有一个
  
gitlab-ctl reconfigure
+
每一个stage下的 step 要定义在一个 steps 里,stages里面包含了step,具体的执行步骤都写在step里面 ,一行一个,可以写多行
 
</pre>
 
</pre>
 
+
== 第一种 Install and configure the necessary dependencies ==
+
==Jenkinsfile(脚本式)==
<pre>进入gitlab官方网站,选择对应的操作系统——CentOS 6 (and RedHat/Oracle/Scientific Linux 6),
 
https://about.gitlab.com/downloads/#centos6
 
 
 
按照官方的提示进行安装:
 
安装配置必要的依赖
 
在Centos 6 和 7 中,以下的命令将会打开HTTP和SSH在系统防火墙中的可访问权限。
 
 
 
#sudo lokkit -s http -s ssh
 
 
 
 
 
 
 
 
 
 
 
[gitlab-ce]
 
name=gitlab-ce
 
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6
 
repo_gpgcheck=0
 
gpgcheck=0
 
enabled=1
 
gpgkey=https://packages.gitlab.com/gpg.key
 
 
 
 
 
sudo yum makecache
 
 
 
# 安装依赖包
 
sudo yum install curl openssh-server openssh-clients postfix cronie
 
# 启动 postfix 邮件服务
 
sudo service postfix start
 
# 检查 postfix
 
sudo chkconfig postfix on
 
# 安装 GitLab 社区版
 
sudo yum install gitlab-ce
 
# 初始化 GitLab 配置并启动GitLab
 
打开/etc/gitlab/gitlab.rb,将external_url = ‘http://git.example.com’修改为自己的IP地址:http://xxx.xx.xxx.xx,,然后执行下面的命令,对GitLab进行编译。
 
 
 
 
 
 
 
 
 
 
 
sudo gitlab-ctl reconfigure
 
一直都有更新的。
 
 
 
 
 
 
 
sudo gitlab-ctl reconfigure
 
登录GitLab
 
Username: root
 
Password: 5iveL!fe
 
 
 
 
 
 
 
 
 
 
 
我在ubuntu下的一键安装,如果用汉化版的有问题的。
 
所以现在只能用英文原版的。
 
 
 
 
 
现在会要求改密码了 在第一次
 
 
 
dkm12345678
 
 
 
 
 
 
 
git_data_dirs({"default" => "/data/gitlab/git-data"})
 
/data/gitlab/git-data
 
 
 
gitlab-ctl reconfigure </pre>
 
 
 
&nbsp;
 
 
 
== 第二种 Add the GitLab package server and install the package ==
 
<pre>curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
 
sudo yum install gitlab-ce </pre>
 
 
 
&nbsp;
 
 
 
&nbsp;
 
 
 
 
 
[https://cloud.tencent.com/developer/article/1114666 【gitlab小症状】gitlab搭配ssh默认端口引发的血战]
 
 
 
[https://blog.csdn.net/ming19951224/article/details/105479033  docker安装gitlab并使用非标准端口]
 
 
 
==gitlab性能优化调化  占用内存过大问题==
 
 
<pre>
 
<pre>
  
/etc/gitlab/gitlab.rb
+
node {
 +
    stage('Build') {
 +
        //  
 +
    }
 +
    stage('Test') {
 +
        //
 +
    }
 +
    stage('Deploy') {
 +
        //
 +
    }
 +
}
  
#进程数目
+
在脚本式 jenkinsfile 里,你可以定义一个 node 或者多个 node 块,然后在 node 块里
unicorn['worker_processes'] = 2
+
定义你的 stage,在 stage 里定义你的 step 即可
 
+
</pre>
#减少数据库缓存 默认为  256M
 
postgresql['shared_buffers'] = "128MB"
 
 
 
 
 
#减少并发数 默认为8
 
postgresql['max_worker_processes'] = 4
 
  
 +
=进阶advance=
  
 +
[https://www.jenkins.io/zh/doc/book/pipeline/getting-started/ .jenkins.io/zh/doc/book  流水线入门]
  
#减少 sidekiq并发数
+
[https://www.jenkins.io/zh/doc/book/pipeline/getting-started/ jenkins.io 流水线入门]
sidekiq['concurrency'] = 20
 
  
 +
[https://zhuanlan.zhihu.com/p/143552791 Jenkins 声明式流水线的语法错误检查]
  
#最后 reload
+
[https://www.cnblogs.com/mingerlcm/p/12806076.html Pipeline 语法生成器]
gitlab-ctl reconfigure
 
  
</pre>
+
[https://www.jenkins.io/zh/doc/book/pipeline/syntax/ 流水线语法]
[https://www.dgstack.cn/archives/1951.html gitlab占用内存过大问题]
 
  
[https://www.cnblogs.com/h--d/p/10153647.html GitLab配置优化及汉化]
 
  
 +
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 语法快速参考
  
==Gitlab 重置 root 密码==
+
https://www.cnblogs.com/itech/category/245402.html?page=3
<pre>
 
  
先登录入容器
 
  
要重置root密码,请先使用root权限登录服务器。使用以下命令启动Ruby on Rails控制台:
+
[https://www.cnblogs.com/itech/p/5646219.html  jenkins2 pipeline高级 ]
  
su - git
+
=pipeline for example=
gitlab-rails console
 
#gitlab-rails console production
 
  
等到控制台加载完毕,您可以通过搜索电子邮件或用户名等方法找到您的账号。
 
  
user = User.where(id: 1).first
+
其实就是有点像share library
 +
流水线 -->定义
 +
<gallery>
 +
Jul012021Z1.png
 +
</gallery>
  
或者
+
然后有个叫jenkinsfile
  
user = User.find_by(email: 'admin@local.host')
+
[https://blog.51cto.com/u_13760351/2527263  Jenkins--pipline 流水线部署Java后端项目]
  
找出用户以后,可以更改其密码:
+
[https://blog.51cto.com/u_13760351/2526052  本地java代码上传Gitlab仓库]
  
user.password = '12345678'
+
=是Blue Ocean=
#user.password_confirmation = 'e12345678'
+
https://www.jenkins.io/zh/doc/book/blueocean/
  
user.save!
+
Blue Ocean 重新思考Jenkins的用户体验,从头开始设计Jenkins Pipeline, 但仍然与自由式作业兼容,Blue Ocean减少了混乱而且进一步明确了团队中每个成员 Blue Ocean 的主要特性包括:
可能得先重启服务呢  一定要保存 有时登录不对 可能是浏览器缓存了哦
 
最后,保存上面的更改,即可使用新密码登录。
 
</pre>
 
[https://www.codenong.com/cs105343781/ 服务器Gitlab忘记root密码]
 
  
https://docs.gitlab.com/ee/security/reset_user_password.html
+
    持续交付(CD)Pipeline的 复杂可视化 ,可以让您快速直观地理解管道状态。
 +
    Pipeline 编辑器 - 引导用户通过直观的、可视化的过程来创建Pipeline,从而使Pipeline的创建变得平易近人。
 +
    个性化 以适应团队中每个成员不同角色的需求。
 +
    在需要干预和/或出现问题时 精确定位 。 Blue Ocean 展示 Pipeline中需要关注的地方, 简化异常处理,提高生产力
 +
    本地集成分支和合并请求, 在与GitHub 和 Bitbucket中的其他人协作编码时实现最大程度的开发人员生产力。
  
== 报错 ==
+
简言之:简化复杂可视化,提供更个性直观的界面,可以精准定位构建失败的位置
<pre>================================================================================
 
Recipe Compile Error in /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/default.rb
 
================================================================================
 
  
RuntimeError
+
[https://www.cnblogs.com/hellxz/p/pipeline_maven_build.html  Jenkins教程(四)安装BlueOcean与Maven构建 ]
------------
 
GitLab external URL must include a schema and FQDN, e.g. http://gitlab.example.com/
 
  
记得前缀有http样
+
=see also=
 
+
[https://www.cnblogs.com/mingerlcm/p/12790884.html Jenkins Pipeline介绍]
</pre>
 
 
 
[https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/ https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/]
 
  
[https://www.linuxchina.net/?p=2750 https://www.linuxchina.net/?p=2750]
+
[https://www.cnblogs.com/mingerlcm/p/12727253.html jenkins从头到尾 目录]
  
&nbsp;
+
[https://www.cnblogs.com/mingerlcm/p/12799362.html Jenkins Pipeline示例]
  
=see also=
+
[https://www.cnblogs.com/mingerlcm/p/12799493.html  使用 pipeline 实现 monitor 仓库代码的发布 ]
[https://docs.gitlab.com/omnibus/docker/ GitLab Docker images]
 
  
[https://my.oschina.net/u/1432614/blog/658568 在 CentOS 7 上使用 Docker 部署安装 GitLab]
+
[https://www.cnblogs.com/itech/p/12747748.html  Jenkins pipeline jenkinsfile的两种写作方式声明式和脚本式 ]
  
[https://github.com/beginor/docker-gitlab-ce GitLab 中文社区版 Docker 镜像]
+
[https://objcoding.com/2019/02/16/docker-jenkins-pipeline/ 基于Jenkins Pipeline自动化部署知道个过程而已]
  
[https://gist.github.com/ouyangzhiping/47fcbf26d213146407f2 ouyangzhiping/docker-gitlab.md]
 
  
[https://www.cnblogs.com/weifeng1463/p/7714492.html GitLab的安装及使用教程]
+
[https://www.jianshu.com/p/bcd42b4f9885 Jenkins + Pipeline 自动化部署项目]
  
[https://segmentfault.com/a/1190000021593151 使用Docker安装GitLab]
+
[https://www.jianshu.com/p/daf32c908ff9 Jenkins + Pipeline 构建流水线发布]
  
[[Category:git]] [[Category:ops]]
+
[https://www.cnblogs.com/itech/p/12747740.html  Jenkins pipeline之声明式的jenkinsfile ]
 +
[[category:ops]] [[category:devops]]

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

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仓库

是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