actions/checkout@v2gitconfig을 바꾸는 부작용이 있어요.

한마디로


github actions에서 사용하는 것은 입니다.git/config를 다시 써야 하기 때문에 actions/checkout@v2를 사용하면 예상치 못한 git 명령을 사용하는 동작이 나타날 수 있으니 주의하십시오.
그리고 잊지 마세요actions/checkout@v2.

추기


리뷰를 받았지만 다음 기술을 통해 피할 수 있다.
- uses: actions/checkout@v2
  name: "チェックアウト"
  with:
    persist-credentials: false

무슨 일이 있었는지


github의 사유창고 의존성이 포함되어 있기 때문에 영패를 사용하여 의존성을 해결합니다.
다음 작업 절차를 썼습니다.
# at github.com/Urotea/sample-private-app.git
name: sample
on:
  push:
    branches:
    - "*"

jobs:
  test1:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        name: "チェックアウト"
      - name: set git config
        env:
          READONLY_GITHUB_TOKEN: ${{ secrets.PAT }}
        run: git config --global url."https://${READONLY_GITHUB_TOKEN}:x-oauth-[email protected]/Urotea".insteadOf "https://github.com/Urotea"
      - name: access remote
        # gitでリモートアクセスするサンプル
        run: git clone https://github.com/Urotea/sample-private-lib.git
  test2:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
        name: "チェックアウト"
      - name: set git config
        env:
          READONLY_GITHUB_TOKEN: ${{ secrets.PAT }}
        run: git config --global url."https://${READONLY_GITHUB_TOKEN}:x-oauth-[email protected]/Urotea".insteadOf "https://github.com/Urotea"
      - name: access remote
        # gitでリモートアクセスするサンプル
        run: git clone https://github.com/Urotea/sample-private-lib.git
테스트1이 떨어졌지만 테스트2는 정상적으로 작동합니다.
이유는git/config를 직접 쓰기 때문에 내가 설정한 config보다 우선적으로 사용합니다.
(config의 우선순위는local&global).dockerignore 그런 일은 안 한 것 같아요.그래서 테스트2가 통과했습니다.
"아니오, 작업 프로세스에서git 명령을 사용하지 않습니다."그렇게 생각할지도 모르지만, 함정이 하나 더 있어.
docker build을 하는 경우입니다.다음은 여기를 설명하겠습니다.

github actions를 사용하여 docker build을 진행할 때 주의사항


상기 발전 형식.git으로 인해 docker build은 실패할 수 있습니다.
다음 예는 docker가github 개인 창고에 의존하는 js 응용 프로그램을 구축하는 경우입니다.
workflow.yaml
# at github.com/Urotea/sample-private-app.git
name: sample
on:
  push:
    branches:
    - "*"

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        name: "チェックアウト"
      - name: build docker
        env:
          READONLY_GITHUB_TOKEN: ${{ secrets.PAT }}
        run: docker build --build-arg TOKEN=$READONLY_GITHUB_TOKEN -t test:latest .
Dockerfile
FROM node:14
ARG TOKEN
WORKDIR /src
COPY . .
RUN git config --global url."https://${TOKEN}:[email protected]/Urotea".insteadOf "https://github.com/Urotea"
RUN yarn install --frozen-lockfile # ここで落ちる
package.json
{
  "dependencies": {
    "sample-private-lib": "git+https://github.com/Urotea/sample-private-lib.git#v0.0.1",
    },
    // 以下略
}
왜 빌딩이 무너졌을까?
  • actions/checkout@v2 개작actions/checkout@v1
  • docker build에서actions/checkout@v2actions/checkout@v2docker에
  • 복사

  • 실행.git/config 중 후면COPY . .에서 두드렸지만 읽을 수 없음.git/*으로 실패
  • 만약 현지 설정yarn install --frozen-lockfilegit에 불편하면 무단으로 개작한.git/config을 도커 안에 가져가면 빌딩이 성립될 수 있다.
    원래 .dockerignore 다 가져가면 안 돼요?그건...
    근데 개발할 때 다들 하지 않을까요?

    최후


    . dockerignore를 무시하지 마십시오.또 actions/checkout@v2처럼 다 가져가지 말고 적당히 가져갈 것을 골라라.
    같은 github 영패를 사용하여 로컬 도커 빌딩을 통과하고 액션스의 작업 절차에서 떨어지는 현상에 시달려 반나절을 망가뜨렸다...
    아니면 .git/config부작용이 있는 동작도 하지 않았으면 좋겠다.실행하고 config 돌려주시면 안 돼요?
    어떤 의미에서 보면, 이것은 아마도 채용 기회일 것이다.

    좋은 웹페이지 즐겨찾기