Google

    #工具

    Chrome

    禁止区域重定向

    不知道是否之前下错了版本,Chrome 搜索条默认总是使用 https://www.google.com.vn(越南版)。

    找到 chrome://settings/ 中的 Search 栏,点击 Manage search engines... 按钮,在里面新增一条:

    # 下面是一条记录中的三个字段
    # 前面两个字段可以随便取名,不与现有的名字冲突就行。最后一个字段只改了默认值中的域名,默认是用变量,现在写死了。
    Google.com
    www.google.com
    https://www.google.com/search?q=%s&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:iOSSearchLanguage}{google:searchClient}{google:sourceId}{google:instantExtendedEnabledParameter}{google:contextualSearchVersion}ie={inputEncoding}
    

    将鼠标放在新增的记录上会显示 Make default,点击即可设为默认的搜索方式。

    如果在地址栏输入 google.com,默认也会区域重定向,解决办法是输入 google.com/ncr,其中 NCR 是 No Country Redirect 的缩写。

    Google

    搜索豆瓣的豆列

    site:http://douban.com/doulist 心理学
    

    操作符

    text1 text2                           # AND
    text1 OR text2
    "text1 text2"                         # 搜词组
    text1 -text2                          # 不能有 text2
    text1 ~text2                          # text2 可以用同义词
    site:youtube.com "china"              # 站内搜索
    filetype:pdf python                   # 只显示指定格式的文件 (也可以用 ext:pdf)
    intitle:chinese food                  # 搜标题 (food 不要求在标题中)
    allintitle:chinese food               # 只搜标题 (都必须在标题中)
    intext, allintext                     # 搜正文 (用法同上)
    inurl, allinurl                       # 搜 URL (用法同上)
    related:http://36kr.com               # 搜索相似的页面 (找同行)
    define:python                         # 查字典
    link:URL                              # 搜索引用该 URL 的网页
    cache:URL                             # 在缓存中查网页的老版本
    

    通配符:*?

    URL 参数:

    • &imgtype= news|face|clipart|lineart|photo:资讯、脸部特写、剪贴画、素描、照片。
    • &imgc=gray|mono|color:黑白、灰阶、全彩。

    特殊搜索

    Github

    在 Github 页面上方的搜索条中输入(非仓库内搜索):

    stars:>1000                         # 喜爱度超过 1000 的项目 (还可以在页面右侧选择语言)
    

    Jenkins

    #自动化

    About

    Jenkins 源于 2004 年 Sun 公司的员工 Kohsuke Kawaguchi 的个人项目,最初叫 Hudson。后来 Sun 被 Oracle 收购,包括 Hudson 商标,之后开源社区又与 Oracle 产生分歧,就另外维护了一个开源的分支,叫做 Jenkins。Oracle 的版本依旧叫 Hudson。

    Jenkins 是用 Java 开发的。

    安装

    WAR 包形式

    这种方式运行在内嵌的 Servlet 容器中。

    wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
    java -jar jenkins.war
    

    CentOS 7

    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
    
    yum install jenkins
    systemctl start jenkins
    

    然后

    访问:http://localhost:8080,按照页面指示一步步操作就可以了。

    配置文件

    /var/lib/jenkins/           # 这是通过服务启动的方式,如果是手动启动,配置文件路径是 ~/.jenkins
    ├── config.xml
    ├── hudson.model.UpdateCenter.xml
    ├── hudson.plugins.git.GitTool.xml
    ├── identity.key.enc
    ├── jenkins.install.InstallUtil.lastExecVersion
    ├── jenkins.install.UpgradeWizard.state
    ├── jobs/                   # 工作目录
    ├── logs/
    ├── nodeMonitors.xml
    ├── nodes/
    ├── plugins/
    ├── queue.xml.bak
    ├── secret.key
    ├── secret.key.not-so-secret
    ├── secrets/
    ├── updates/                # 可用的插件更新
    ├── userContent/
    ├── users/
    ├── war/
    └── workflow-libs/
    
    /etc/sysconfig/jenkins      # 配置文件
    

    工作目录结构:

    jobs/
    ├── builds
    │   ├── 1                       # build 目录
    │   │   ├── build.xml           # build 信息
    │   │   └── log                 # <终端输出>
    │   ├── 2
    │   │   ├── build.xml
    │   │   ├── changelog.xml
    │   │   └── log
    │   ├── 3
    │   │   ├── build.xml
    │   │   ├── changelog.xml
    │   │   └── log
    │   ├── lastFailedBuild -> 4
    │   ├── lastStableBuild -> 6
    │   ├── lastSuccessfulBuild -> 6
    │   ├── lastUnstableBuild -> -1
    │   ├── lastUnsuccessfulBuild -> 4
    │   └── legacyIds
    ├── config.xml
    ├── lastStable -> builds/lastStableBuild
    ├── lastSuccessful -> builds/lastSuccessfulBuild
    ├── nextBuildNumber
    └── workspace/
    

    新建作业:Hello World

    New Item -> Freestyle project ( test)

    • -> Build Triggers -> Trigger builds remotely -> Authentication Token ( 123456)
    • -> Build -> Add build step -> Exceute shell(建两个)
    ## Build 1
    #!/usr/bin/bash
    echo "Hello Jenkins" > /tmp/hello.txt
    
    ## Build 2
    #!/usr/bin/bash
    echo "Task 2" >> /tmp/hello.txt
    

    访问:http://localhost:8080/job/test/build?token=123456,然后就可以看到文件被创建了。

    从首页点击任务链接进去后,可以看到任务执行历史。左边还有一个 Build now 按钮,点击就立即执行任务。

    Git Hook + 单元测试

    通过 Git Hook 监测用户 Commit,然后触发 Jenkins 去执行代码中的单元测试脚本。

    1. 创建 Freestyle project (unittest)

    2. 选择 Source Code Management -> Git (file:///your/path/unittest)

    3. 选择 Build Triggers -> Trigger builds remotely -> Authentication Token (123456)

    4. 选择 Build -> Add build step -> Excute shell

      #!/usr/bin/bash
      python $WORKSPACE/test.py           # 环境变量通过页面上的链接查看。它会克隆 Git 到这个目录下。
      
    5. 准备好 test.py 和 Hook:

      $ git init unittest
      $ cd unittest/
      
      $ cat << EOF > test.py
      import unittest
      
      def div(m,n):
          return m/n
      
      class TestDiv(unittest.TestCase):
          def setUp(self):
              pass
      
          def test_a(self):
              self.assertEqual(div(4,2), 2)
      
          def test_b(self):
              self.assertEqual(div(0,2), 0)
      
      if __name__ == '__main__':
          unittest.main()
      EOF
      
      $ git add test.py; git commit -m "init"
      
      $ cat << EOF > .git/hooks/post-commit
      #!/usr/bin/bash
      curl -u USER:PASSSWD http://localhost:8080/job/unittest/build?token=123456     # 修改用户名密码
      
      $ chmod +x .git/hooks/post-commit
      
    6. 再提交一次即可触发。

    Build 后触发另一个 Job

    Build Triggers -> Build after other projects are built -> Projects to watch (填入 Project 名)

    • Trigger only if build is stable
    • Trigger even if the build is unstable
    • Trigger even if the build fails

    触发 Build 的方式

    wget http://USER:PASSWD@JENKINS_URL/job/NAME/build?token=TOKEN
    curl -u USER:PASSWD http://JENKINS_URL/job/NAME/build?token=TOKEN
    

    环境变量

    如果 Build 方式为 Excute shell,可能需要在脚本中用到一些环境变量。见 /env-vars.html

    另外,shell 不一定是 bash,也可以是 Python 脚本之类的,加上 shebang (#!) 即可。

    BRANCH_NAME
    CHANGE_ID
    CHANGE_URL
    CHANGE_TITLE
    CHANGE_AUTHOR
    CHANGE_AUTHOR_DISPLAY_NAME
    CHANGE_AUTHOR_EMAIL
    CHANGE_TARGET
    BUILD_NUMBER
    BUILD_ID
    BUILD_DISPLAY_NAME
    JOB_NAME
    JOB_BASE_NAME
    BUILD_TAG
    EXECUTOR_NUMBER
    NODE_NAME
    NODE_LABELS
    WORKSPACE                       # 绝对路径。如果绑定了 Git,里面就是代码。
    JENKINS_HOME
    JENKINS_URL
    BUILD_URL
    JOB_URL
    SVN_REVISION
    SVN_URL
    

    服务换端口、加前缀

    通过参数手动启动:

    java -jar jenkins.war --prefix=/jenkins --httpPort=8000       # 换端口
    

    或者编辑 /etc/sysconfig/jenkins

    JENKINS_PORT="8000"
    JENKINS_ARGS="--prefix=/jenkins"
    

    然后重启服务:

    systemctl restart jenkins
    

    访问:http://localhost:8000/jenkins

    用 Apache 做反向代理

    创建文件 /etc/httpd/conf.d/jenkins.conf

    ProxyRequests Off
    ProxyPass /jenkins http://localhost:8000/jenkins nocanon
    ProxyPassReverse /jenkins http://localhost:8000/jenkins
    AllowEncodedSlashes NoDecode
    
    <Proxy http://localhost:8000/jenkins*>
        Require all granted
    </Proxy>
    

    要关闭 SELinux,或者:

    setsebool -P httpd_can_network_connect true
    

    访问:http://localhost/jenkins