在coding中使用TeXLive云原生开发

前言

之前一直是在使用cloudstudio作为在线开发的主力工具,但是cloudstudio对于自定义环境实在是不够友好,并且提供的存储空间也相对比较小气。一直以来,我都是在本地的TeXLive或者是overleaf上编写TeX文件的。

前不久coding的升级改版中直接提供了云原生开发的功能,不仅能直接提供现有的code-server在线开发功能,甚至通过Dockerfile自定义环境,弥补了在某些小场景下使用持续集成"杀鸡用牛刀"的问题。

正巧,需要用TeX写一份简历,那就用新上线的云原生开发来试一下。

需求

根据现有文档,可以明确以下支持的功能:

  1. 支持自定义环境
  2. 支持自行设定开发环境算力,cpu:ram=1:2
  3. 运行宿主机位于腾讯云内网,可以使用腾讯云内网资源

所需开发环境有以下要求:

  1. 使用TeXLive新版本作为基础,即xetex而不是对CJK不友好的latex
  2. 使用的CPU数尽可能少。
  3. 创建开发环境过程尽量不受网络干预。

编写.coding-ci.yml

coding中云原生开发和云原生构建所依据的就是这个.coding-ci.yml。其中可以指定不同的触发器,触发器对应的操作,各类操作使用的环境,环境的各项参数以及在环境中运行的命令。设定CPU数量的yml案例已经在文档中给出,直接照抄就可以。

代码语言:yaml
复制
$:
  api_trigger_vscode: # 通过云原生开发触发器
    clouddev:
      docker:
        # 优先使用 .ide/Dockerfile 文件构建基础镜像
        # 如果仓库中不存在 .ide/Dockerfile 文件,则使用默认镜像 codingci/default-env:latest
        build: .ide/Dockerfile
        image: codingci/default-env:latest
      runner:
        cpus: 4 # 设定使用的CPU数量,可以设定为1-8的之间的整数
      services:
        - vscode
        - docker
      stages:
        - name: 开启云原生开发
          type: vscode:go

编写Dockerfile

Dockerfile里面就有许多可以踩的坑了

一开始我在docker hub上面直接找到了TeXLive官方构建的TeXLive镜像。这还不直接爽用?很快啊,这第一版的Dockerfile就出炉了。

代码语言:shell
复制
FROM mirror.ccs.tencentyun.com/texlive/texlive:latest-full
RUN sed -i 's/deb.debian.org/mirrors.tencentyun.com/g' /etc/apt/sources.list && apt update && apt install -y wget unzip openssh-server
RUN curl -fsSL https://code-server.dev/install.sh | sh &&\
    code-server --install-extension redhat.vscode-yaml &&\
    code-server --install-extension orta.vscode-jest &&\
    code-server --install-extension james-yu.latex-workshop &&\
    echo done
# 指定字符集支持命令行输入中文(根据需要选择字符集)
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8

这里替换了两个部分,首先是在FROM中指定了使用腾讯云内网的Docker镜像加速而非直接从docker.io下载。接着便是替换源,将容器中预设的镜像源地址替换为腾讯云镜像源的内网地址加速apt更新下载。

替换的时候就有一个坑,texlive使用的是debian12的Docker容器作为基础,而此处我使用的写法是Debian11使用的一键替换命令,也就是说。

我这里使用sed去替换会直接提示我没有这个文件!

从Debian12开始,Docker中的apt源文件位置移动到了/etc/apt/sources.list.d/debian.sources,而不再是原来的位置。与此同时,Debian12的CD-image中镜像源仍然保留在此前的位置不变。

此时,基本上全部的流量都通过腾讯云的服务了,唯一剩下的也就是code-server的安装过程了